一、. 安装pt-query-digest
1. 下载最安装包:wget https://www.percona.com/downloads/percona-toolkit/2.2.16/RPM/percona-toolkit-2.2.16-1.noarch.rpm (可以安装最新的)
2. 用yum安装:yum localinstall -y percona-toolkit-2.2.16-1.noarch.rpm (要切换到1中下载的.noarch.rpm文件所在的目录,操作完1,直接操作2,不用切换目录。)
二、打开mysql的慢日志。
1. 打开mysql的配置文件:(一般在/etc/my.cnf, 如果没有,用find -name my.cnf 查找)
vim /etc/my.cnf
2. 设置慢sql配置
slow_query_log=1 #打开慢sql日志
slow_query_log_file=/var/lib/mysql/slow-query.log # 慢日志存放的路径,这个要记住,后续要用。
long_query_time=0.001 # 慢日sql的阈值,这里是为了测试,所以设置的很小。
3. 关闭后,重启mysql, service mysqld restart (这里是linux CentOS 7,其它系统的重启请自行查找)
三、执行一些sql。
四、生成报告
pt-query-digest /var/lib/mysql/slow-query.log>> slowreport3.log # 其中 /var/lib/mysql/slow-query.log 为二中设置的日志路径。
五、查看日志(报告中的各字段的含义网上已经特别多,可以自行查阅,也可以参考下面和选取的部分)
六、用profiling分析具体的sql
1. 设置profiling: set profiling=1;
2. 执行慢SQL, 如:
3. show profiles, 查看总览
4. show profile all for query 1; 查看具体query 的详细信息 在这里就要分析具体的原因了。
5. explain 执行语名, 看下执行计划,看看其操作的信息。
其中比较重要的信息如下,如果想知道更多信息可以参考(http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html)
Type:
1)。ALL :全表无索引扫描
2)。index:有索引全表扫描
3)。 Range:范围扫描 (用了between <> 等)
possible_keys: 指出MySQL能使用哪个索引在该表中找到行
Key: 表示Mysql实际决定使用的索引。没有索引时就是null。
key_len:列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref:显示使用哪个列或常数与key一起从表中选择行。
rows:列显示MySQL认为它执行查询时必须检查的行数。
6. 从5可以看出,没有使用索引,那么就要查下该表是否创建了索引:show indexes from Firstdatabase.users;
Non_unique:如果索引不能包括重复值
则为0,反之为1
Key_name: 索引名称,名称相同表示是同一个索引即联合索引
Seq_in_index: 和Column_name结合, 即seq_in_index值小的所对应的列,在使用索引时会优先调用。
Collation:索引列是以什么方式存储在索引中,在MySQL中,有值‘A’(升序)或NULL(无分类)
Cardinality:基数的意思,表示索引中唯一值的数目的估计值。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。我们知道某个字段的重复值越少越适合建索引,所以我们一般都是根据Cardinality来判断索引是否具有高选择性,如果这个值非常小,那就需要重新评估这个字段是否适合建立索引。因为MySQL数据库中有各种不同的存储引擎,而每种存储引擎对于B+树索引的实现又各不相同。所以对Cardinality统计时放在存储引擎层进行的,至于它是如何统计更新的在这里就不再做更深入的介绍了
Sub_part:前缀索引,如果列只是被部分的编入索引,则为被编入索引的字符的数目
;如果整列被编入索引,则为NULL
。一般对于BLOB,TEXT或者很长的VARVHAR类型的列,必须使用前置索引,如果使用完整长度会让索引变得很慢
Packed:指示关键字如何被压缩,如果没有被压缩,则为NULL
NULL:如果列中含有NULL则为YES
Index_type:索引方法,FULLTEXT、HASH、BTREE、RTREE,常用的是BTREE