加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MYSQL教程数据库Mysql性能优化详解

发布时间:2020-12-12 02:41:49 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程数据库Mysql性能优化详解》要点: 本文介绍了MYSQL教程数据库Mysql性能优化详解,希望对您有用。如果有疑问,可以联系我们。 在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面

《MYSQL教程数据库Mysql性能优化详解》要点:
本文介绍了MYSQL教程数据库Mysql性能优化详解,希望对您有用。如果有疑问,可以联系我们。

在mysql数据库中,mysql key_buffer_size是对MyISAM表性能影响最大的一个参数(注意该参数对其他类型的表设置无效),下面就将对mysql Key_buffer_size参数的设置进行详细介绍下面为一台以MyISAM为主要存储引擎服务器的配置:
MYSQL入门

mysql> show variables like 'key_buffer_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| key_buffer_size | |
+-----------------+------------+ 

分配了512MB内存给mysql key_buffer_size,我们再看一下key_buffer_size的使用情况:
MYSQL入门

mysql> show global status like 'key_read%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_read_requests | | //从缓存读取索引的哀求次数.
| Key_reads | | //从磁盘读取索引的哀求次数.
+------------------------+-------------+ 

一共有27813678764个索引读取哀求,有6798830个哀求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:
MYSQL入门

key_cache_miss_rate = Key_reads / Key_read_requests * 100% 

比如上面的数据,key_cache_miss_rate为0.0244%,4000个索引读取哀求才有一个直接读硬盘,已经很BT了,key_cache_miss_rate在0.1%以下都很好(每1000个哀求有一个直接读硬盘),所以理论来上来说,这个比值越小越好,但过小的话,难免造成内存浪费.
MYSQL入门

以上两个值的比率固然能一部分的说明key_buffer_size是否合理,但仅仅以此就说明该值设置的合理的话,就过于偏激和片面了.因为这里忽略了两个问题:
MYSQL入门

1、比例并不显示数量的绝对值大小
MYSQL入门

2、计数器并没有考虑时间因素
MYSQL入门

虽说Key_read_requests大比小好,但是对于系统调优而言,更有意义的应该是单位时间内的Key_reads,即:MYSQL入门

Key_reads / Uptime
MYSQL入门

具体查看办法如下:
MYSQL入门

[root@web mysql]# mysqladmin ext -uroot -p -ri | grep Key_reads
Enter password:
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | |
| Key_reads | | 

注:命令里的mysqladmin ext其实便是mysqladmin extended-status,你甚至可以简写成mysqladmin e.
MYSQL入门

其中第一行表示的是汇总数值,所以这里不必考虑,下面的每行数值都表示10秒内的数据变化,从这份数据可以看出每10秒系统大约会出现500次Key_reads拜访,折合到每1秒就是50次左右,至于这个数值到底合理与否,就由服务器的磁盘能力而定了.(注:我这里之所以数据变化较大,是因为有update等语句造成了表锁而导致下个时间段内的查询数猛增.)
MYSQL入门

为啥数据按10秒取样,而不是直接按1秒取样?由于时间段过小,数据变化比较剧烈,不容易直观估计大小,所以通常数据依照10秒或者60秒之类的时间段来取样是更好的.
MYSQL入门

除些之外,我们还可以参考下key_blocks_*参数:
MYSQL入门

mysql> show global status like 'key_blocks_u%';
+------------------------+-------------+
| Variable_name | Value |
+------------------------+-------------+
| Key_blocks_unused | |
| Key_blocks_used | |
+------------------------+-------------+ 

Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了.比较抱负的设置:
MYSQL入门

Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80% 

笔者注:
MYSQL入门

查看簇(文件系统块,block)的大小(字节数)
MYSQL入门

Centos中有以下几种办法:
MYSQL入门

#tune2fs /dev/sda1 | grep "block size"
#dumpe2fs /dev/sda1 | grep "block size"MYSQL入门

理论上文件系统块是扇区的倍数
MYSQL入门

mysqladmin是MySQL一个重要的客户端,最常见的是使用它来关闭数据库,除此,该命令还可以了解MySQL运行状态、进程信息、进程杀死等.本文介绍一下如何使用mysqladmin extended-status(因为没有"歧义",所以可以使用ext代替)了解MySQL的运行状态.
MYSQL入门

1. 使用-r/-i参数
MYSQL入门

使用mysqladmin extended-status命令可以获得所有MySQL性能指标,即show global status的输出,不过,因为多数这些指标都是累计值,如果想了解当前的状态,则必要进行一次差值计算,这就是mysqladmin extended-status的一个额外功能,非常实用.默认的,使用extended-status,看到也是累计值,但是,加上参数-r(--relative),就可以看到各个指标的差值,配合参数-i(--sleep)就可以指定刷新的频率,那么就有如下命令:
MYSQL入门

mysqladmin -uroot -r -i -pxxx extended-status
+------------------------------------------+----------------------+
| Variable_name | Value |
+------------------------------------------+----------------------+
| Aborted_clients | |
| Com_select | |
| Com_insert | |
......
| Threads_created | |
+------------------------------------------+----------------------+ 

2. 配合grep使用
MYSQL入门

配合grep使用,我们就有:
MYSQL入门

mysqladmin -uroot -r -i -pxxx extended-status 

grep "Questions|Queries|Innodb_rows|Com_select |Com_insert |Com_update |Com_delete "
| Com_delete | |
| Com_delete_multi | |
| Com_insert | |
| Com_select | |
| Com_update | |
| Innodb_rows_deleted | |
| Innodb_rows_inserted | |
| Innodb_rows_read | |
| Innodb_rows_updated | |
| Queries | |
| Questions | 2721 | 

当然,还可以配合awk等,笔者在这里就纷歧一介绍了,有情趣的朋友可以参考一下其它文档.
MYSQL入门

《MYSQL教程数据库Mysql性能优化详解》是否对您有启发,欢迎查看更多与《MYSQL教程数据库Mysql性能优化详解》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读