转载地址:http://blog.csdn.net/cloud_ll/article/details/39807427
在实际的日志分析中,通常慢日志的log数量不少,同时相同的查询被记录的条数也会很多,这里就需要如何从慢日志查询中找到最有问题,最需要优化的日志。在这方面,有很多分析工具,最基本的分析工具就是MySQL自带的mysqldumpslow,mysqldumpslow(Perl脚本)的输出示例:
- [root@cloudlu bin]# ./mysqldumpslow -s t -t 1 /usr/local/mysql/data/cloudlu-slow.log
- Reading mysql slow query log from /usr/local/mysql/data/cloudlu-slow.log
- Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=3.0 (3), root[root]@localhost
- select * from t
-s 排序选项:c 查询次数 r 返回记录行数 t 查询时间
-t n:显示top n条查询
对于一般的分析已经差不多了,不过对于百分比等等数据mysqldumpslow就不够完善了。所以世界上多了很多各种MySQL慢日志分析工具,比较优秀的有mysqlsla(Perl脚本)和pt-query-digest(Perl脚本),可以提供Count, sql的执行次数及占总的slow log数量的百分比,Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比,95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间,Lock Time, 等待锁的时间,95% of Lock , 95%的慢sql等待锁时间,Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量,Rows examined, 扫描的行数量,还可以生成表报,存储分析结果。这里就不一一介绍了。
通过这些慢日志分析软件定位到了慢查询语句就已经完成了SQL优化的一大半。接下来通过在MySQL中执行explain或者desc命令查看慢查询语句,可以看出为什么SQL查询慢。
- mysql> explain select * from test.t \G
- *************************** 1. row ***************************
- id: 1
- select_type: SIMPLE
- table: t
- type: ALL
- possible_keys: NULL
- key: NULL
- key_len: NULL
- ref: NULL
- rows: 2
- Extra: NULL
- 1 row in set (0.00 sec)
它的输出格式细节可以关注MySQL explain format,在输出中最要注意的是:
1. type:ALL是效率最差,最要注意的
2. key:是否有使用Key,key长度如何
3. Extra:最好不要出现filesort以及temporary,最主要是要关注在orderby和groupby。