一、linux 环境下mysqlreport安装
yum -y install perl-DBD-MySQL #依賴包,不安装没法运行mysqlreport
yum -y install perl-DBI #依賴包
yum -y install mysqlreport
在linux系统上经过这三步就安装好了这个工具。接下来就可以对数据库运行状况进行分析了。
二、mysqlreport使用
使用比较简单,直接执行:
mysqlreport --user root --password passw0rd --host 127.0.0.1 --no-mycnf --flush-status --outfile ./result.txt
就可以把数据库整体情况保存到当前目录中。
具体命令参数查看
mysqlreport —help
三、mysqlreport结果分析:
数据库操作报表和查询排序报表
__ Questions ___________________________________________________________
Total 181.41k 0.5/s
DMS 141.40k 0.4/s %Total: 77.95
Com_ 33.15k 0.1/s 18.28
COM_QUIT 6.86k 0.0/s 3.78
-Unknown 7 0.0/s 0.00
Slow 3 s 0 0/s 0.00 %DMS: 0.00 Log:
DMS 141.40k 0.4/s 77.95
SELECT 116.75k 0.3/s 64.36 82.57
UPDATE 14.30k 0.0/s 7.89 10.12
INSERT 8.09k 0.0/s 4.46 5.72
DELETE 2.25k 0.0/s 1.24 1.59
REPLACE 0 0/s 0.00 0.00
Com_ 33.15k 0.1/s 18.28
set_option 20.53k 0.1/s 11.32
change_db 6.84k 0.0/s 3.77
show_fields 4.87k 0.0/s 2.68
__ SELECT and Sort _____________________________________________________
Scan 7.53k 0.0/s %SELECT: 6.45
Range 10.71k 0.0/s 9.17
Full join 0 0/s 0.00
Range check 0 0/s 0.00
Full rng join 8 0.0/s 0.01
Sort scan 18.79k 0.0/s
Sort range 9.82k 0.0/s
Sort mrg pass 0 0/s
Total部分:DMS这个反映数据库使用情况,0.4/s(每秒操作量);
slow部分:这个参数挺重要,只是因为这里设置的慢查询3s太长了,正常情况下尽量设置在1s左右,这块需要对db进行配置,把慢查询统计设置的短些。
DMS部分: 告诉我们这个数据库中各种 SQL 所占的比例,这个例子中,SELECT多,要做 SQL 优化的话,肯定优先考虑SELECT语句,才会起到立竿见影的效果。
select and sort 查询和排序报表
这块的报表数据具有极大的参考性,一下就能看出问题的所在,这里的Scan(代表全表扫描)每秒执行多少48次全表扫描,如果比较多了,需要对语句进行修改,也是我们后面优化的重点内容。
InnoDB 缓存池报表
__ InnoDB Buffer Pool __________________________________________________
Usage 20.22M of 255.97M %Used: 7.90
Read hit 99.99%
Pages
Free 15.09k %Total: 92.10
Data 1.27k 7.73 %Drty: 0.00
Misc 28 0.17
Latched 0.00
Reads 10.07M 26.8/s
From file 735 0.0/s 0.01
Ahead Rnd 0 0/s
Ahead Sql 0/s
Writes 646.89k 1.7/s
Flushes 50.98k 0.1/s
Wait Free 0 0/s
InnoDB 缓存池报表,Innodb Buffer Pool size 定义了Innodb 存储引擎的表数据和索引数据的最大内存缓存大小。这部分对MySQL来说很重要,这里Usage使用如果已经达到100% 这种情况下就必须要增加Innodb缓存池了。
这里的Read hit达到 99.99%,这个值越大越好,尽量达到100% 这里的值与Innodb buffer太小有关。
连接报表
__ Connections _________________________________________________________
Max used 11 of 500 %Max: 2.20
Total 6.86k 0.0/s
从这里可以看出数据连接还完全够用。
表锁报表
__ Table Locks _________________________________________________________
Waited 0 0/s %Total: 0.00
Immediate 106 0.0/s
Waited表示有多少次查询需要等待表锁定;Immediate表示有多少次查询可以立即获得表锁定,同时后面还有一个比例。
对数据库来说『等待』几乎可以肯定是一件很不好的事情,因此 Waited 的值应该要越小越好。最具有代表性的是第三个字段 (Waited 占所有 table lock 的百分比)这里是0.00%,非常好,没有发送过表锁。
临时表报表
__ Created Temp ________________________________________________________
Disk table 17.11k 0.0/s
Table 24.11k 0.1/s Size: 32.0M
File 252 0.0/s
执行explain 在sql分析时出现Using temporary的状态,这意味着查询过程中需要创建临时表来存储中间数据,我们需要通过合理的索引来避免它。
另一方面,当临时表在所难免时,也要尽量减少临时表本身的开销,MySQL可以将临时表创建在磁盘(Disk table)、内存(Table)以及临时文件(File)中,显然,在磁盘上创建临时表的开销最大,
所以我们希望MySQL尽量不要在磁盘上创建临时表,从临时表创建在磁盘(Disktable)和临时文件(File) 上的量级来说,如果偏大了,可以增大tmp_table_size。
全局分析结果:
通过mysqlreport这个工具反应的结果,有以下问题需要去解决下:
总体数据库操作达到600多每秒,对于内网系统用户不太多,操作有点太频繁,看下能够减少不必要的数据库操作。
慢查询未开启,而且设置的时间太长长达10s,通常一个语句大于100ms 可任务需要进行优化,这里需要设置较短分析下慢查询
全表扫描48.5/s 这块要分析下具体的sql写法。
Innodb 缓存占用使用100% ,而且设置大小太小,需要增加缓存大小。




