进行MySQL的配置优化,首先必须找出MySQL的性能瓶颈所在;而SHOW STATUS输出的报告正是用来计算性能瓶颈的参考数据。mysqlreport不像SHOW STATUS那样简单的罗列数据,而是对这些参考数据加以融合计算,整理成一个个优化参考点,然后就可以根据这个优化参考点的值以及该点的衡量标准,进行对应调整。
一、安装:
需要注意的是,mysqlreport是基于perl语言开发,其运行依赖于perl-DBI和perl-DBD-MySQL,所以需要先安装这两个软件。
二、使用:
mysqlreport常用指令:
--user # 指定连接数据库的用户
--password #指定连接数据库的密码
--port #指定端口
--host #指定主机
--sokcet #指定socket文件
--flush-status #显示完报告后,执行"FLUSH STATUS"语句
--outfile #将报告输出至某个文件中
三、输出的报告详细说明
1、基本信息
说明mysql当前的版本,运行的时间,以及当前系统时间MySQL 5.1.61-log uptime 262 23:51:59 Wed Jul 16 17:58:05 2014
2、索引报表
说明mysql当前索引缓冲区的使用率,如果过高,则需要调整key_buffer_size的大小了。write hit及read hit分别说明了写索引和读索引的效率__ Key _________________________________________________________________
Buffer used 8.67M of 512.00M %Used: 1.69
Current 51.75M %Usage: 10.11
Write hit 34.33%
Read hit 99.17%
3、请求报表
1)第一部分mysql处理的总请求数、平均每秒处理的请求数及请求类型。
QC Hists:是指mysql直接从查询缓存中请求结果的数量,也就是查询缓存的命中率,此值越高越好
DMS:是指数据操作语言,也就是增删改查
Com_:是指mysql处理自身运行所使用的开销
2)第二部分是说明mysql的慢查询数,多长时间的查询被认为是慢查询,是由long_query_time定义的。处理慢查询的比例越低越好,一般不要超过0.05%。慢查询日志建议开启。
3)第三部分详细说明了DMS中各种语句的处理数及比例
4)第四部分则详细说明了Com_中各事件的处理数及比例__ Questions ___________________________________________________________
Total 4.12G 181.3/s
QC Hits 2.93G 129.0/s %Total: 71.14
DMS 714.48M 31.4/s 17.34
Com_ 563.75M 24.8/s 13.68
-Unknown 186.61M 8.2/s 4.53
COM_QUIT 97.48M 4.3/s 2.37Slow 3 s 49.32k 0.0/s 0.00 %DMS: 0.01 Log: ONDMS 714.48M 31.4/s 17.34
SELECT 536.16M 23.6/s 13.01 75.04
DELETE 66.80M 2.9/s 1.62 9.35
UPDATE 61.78M 2.7/s 1.50 8.65
INSERT 49.34M 2.2/s 1.20 6.91
REPLACE 401.78k 0.0/s 0.01 0.06Com_ 563.75M 24.8/s 13.68
show_fields 214.45M 9.4/s 5.20
set_option 194.83M 8.6/s 4.73
change_db 144.83M 6.4/s 3.51
5、查询与排序
详细说明mysql在查询时的资源消耗
scan展示的是对全表进行扫描的select语句个数
full join则是多表联合查询的次数__ SELECT and Sort _____________________________________________________
Scan 284.42M 12.5/s %SELECT: 53.05
Range 53.32M 2.3/s 9.95
Full join 3.40M 0.1/s 0.63
Range check 0 0/s 0.00
Full rng join 2.09k 0.0/s 0.00
Sort scan 242.41M 10.7/s
Sort range 5.78M 0.3/s
Sort mrg pass 0 0/s
6、查询缓存(只有在开启了查询缓存之后才会出现)
详细说明了查询缓存的内存使用率
Block Fragmnt:是指内存块碎片,如果你有一个返回超小结果的海量查询,默认的块大小(即4KB)可能会导致大量的内存碎片,这个时候,需要降低"query_cache_min_res_unit"的值,比值越大,碎片越多,一般不建议超过10%
Hits/Inserts/Prunes:其中Hits是最重要的,它反应了有多少查询是从查询缓存中直接获得的,Prunes是指每秒删除的碎片时,该值越低越好
insert/prune:是一个波动性的QC指标。一个稳定运行中的QC,insert进QC的查询数量应该大于prune掉的查询数量。而一个不稳定的QC,比值或许是1:1,甚至偏向prune。这说明两个问题:1、QC大小不够;2、mysql试图缓存一切
hit/insert:用来反映QC的有效性。理想情况是:mysql插入一批稳定的查询到QC里,然后源源不断的命中这批结果……所以,如果QC的有效性足够,这个比值应该是偏向hit的。__ Query Cache _________________________________________________________
Memory usage 68.37M of 128.00M %Used: 53.42
Block Fragmnt 18.92%
Hits 2.93G 129.0/s
Inserts 353.54M 15.6/s
Insrt:Prune 4.17:1 11.8/s
Hit:Insert 8.29:1
7、表锁
一行是总数,一行是当前数。锁等待对于数据库来说永远是糟糕的事情。第三列的总比值反应了一个综述的情况,无论如何不能高过10%,否则肯定就带来一大堆的索引和慢查询问题!__ Table Locks _________________________________________________________
Waited 949 0.0/s %Total: 0.00
Immediate 2.01G 88.4/s
8、表
一行是当前mysql打开的表个数,以及表缓存的使用率,另一行是指mysql运行以来的平均值。这里有两个值比较重要,一个是表的缓存使用率真,如果达到100%,则需要调整"table_open_cahce"的大小;另一个是当前打开表的频率,一般这个值应该小于每秒1次。不过一个负载比较高而又运行的还不错的mysql,可能能达到每秒打开7次表,依然保持100%的表缓存__ Tables ______________________________________________________________
Open 128 of 128 %Cache: 100.00
Opened 39.85M 1.8/s
9、数据库连接数
如果最大连接数接近100%,则需要调整"max_connetions"参数,当然如果连接数过大,有可能是慢查询、糟糕的索引、dns解析太慢所导致的问题;每秒连接数,一般小于5个每秒,但通常只要mysql运行正常,就无所谓__ Connections _________________________________________________________
Max used 547 of 886 %Max: 61.74
Total 97.48M 4.3/s
7、临时表
mysql可以在内存、磁盘及临时文件上创建临时表,要尽可能避免在磁盘上创建临时表,因为速度最慢,要尽可能在内存中创建,第三行的Table就妈表示在内存中创建临时表的大小,Size是指定的内存允许创建的临时表的大小,可以通过"tmp_table_size"参数来调整其大小__ Created Temp ________________________________________________________
Disk table 186.19M 8.2/s
Table 434.05M 19.1/s Size: 64.0M
File 5 0.0/s
8、线程
当mysql的连接数超过了线程缓存数时,需要增大"thread_cache_size"参数的大小__ Threads _____________________________________________________________
Running 1 of 1
Cached 7 of 8 %Hit: 99.48
Created 509.01k 0.0/s
Slow 0 0/s
9、中断及流量__ Aborted _____________________________________________________________
Clients 2.36k 0.0/s
Connects 111.05k 0.0/s
__ Bytes _______________________________________________________________
Sent 2.56T 112.8k/s
Received 892.91G 39.3k/s
10、Innodb缓冲池
innodb缓冲池的大小可以通过"innodb_buffer_size"参数来调整,作为一个innodb引擎的数据库,请尽可能调大该值__ InnoDB Buffer Pool __________________________________________________
Usage 1.00G of 1.00G %Used: 100.00
Read hit 100.00%
Pages
Free 3 %Total: 0.00
Data 62.67k 95.63 %Drty: 0.01
Misc 2861 4.37
Latched 0.00
Reads 4.27T 188.1k/s #innodb缓冲池读性能
From file 4.35M 0.2/s 0.00 #从文件读取
Ahead Rnd 243362 0.0/s #随机读
Ahead Sql 134409 0.0/s #顺序读,只有进行全表扫描的时候才会出现
Writes 3.17G 139.4/s #缓冲池写的数量
Flushes 17.36M 0.8/s #缓冲池的页刷新请求数
Wait Free 0 0/s #空闲等待时间,越小越好
11、innodb锁__ InnoDB Lock _________________________________________________________
Waits 0 0/s #等待某行解锁的累积次数,最好是0次
Current 0 #当前正在等待解锁的行个数,最好是0次
Time acquiring
Total 0 ms
Average 0 ms
Max 0 ms
12、innodb数据、页、行
第一部分列出了四种类型的数据操作,分别是读、写、刷新、等待
第二部分列出了innodb的页信息,缓冲池中页的创建、读取、写入的数量
第三部分则列出了一些对innodb行进行增删改查的数据量__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 5.93M 0.3/s #整个innodb引擎完成所有的数据读取次数,不是数据赢取的字节数
Writes 23.12M 1.0/s #也是统计写的次数
fsync 14.65M 0.6/s #刷新的次数
Pending #读、写、刷新的等待次数
Reads 0
Writes 0
fsync 0Pages
Created 2.04M 0.1/s
Read 21.45M 0.9/s
Written 17.36M 0.8/sRows
Deleted 62.97M 2.8/s
Inserted 283.26M 12.5/s
Read 4.56T 200.7k/s
Updated 34.59M 1.5/s
原文:http://breezey.blog.51cto.com/2400275/1529492