# 7.2慢查询日志介绍

磁盘IO和存储日志所需的磁盘空间

存储慢查询日志需要大量的磁盘空间，

若要存储全部的慢查询日志，日志大小可以达到几百G\~几T的数据

故我们需要对记录到慢查询日志的sql进行控制，控制的参数分别如下：

* slow\_query\_log启动停止记录慢查日志on/off 该参数是一个动态参数，变更即生效

set global by

通过脚本来定时的开关

* slow\_query\_log\_file ：指定慢查日志的存储路径及文件。若不指定，模板将日志保存在Mysql的数据目录中。强烈建议指定该参数，将日志存储和数据存储分开存储
* long\_query\_time：指定记录慢查日志SQL执行时间的阈值，只有SQL执行时间超过阈值的SQL才会被记录到日志中，单位为s，默认值为10S，通常改为0.001秒可能比较合适

和二进制日志不同，慢查日志会记录所有的符合条件的SQL包括查询语句、数据修改语句、已经回滚的SQL

* log\_queries\_not\_using\_indexes 是否记录未使用索引的SQL，若开启，只要是未使用索引的SQL都会被记录，即使SQL执行时间小于long\_query\_time设定的阈值

```
set global slow_query_log=on;
```

慢查日志中记录的内容

用户信息和用户线程ID号

SQL执行使用时间

执行SQL所使用锁的时间

SQL所返回数据的行数

和扫描的数据行数

执行SQL的时间

SQL语句

常用的慢查日志分析工具

mysqldumpslow

汇总除查询条件外其他完全相同的SQL

并将分析结果按照参数中所指定的顺序输出

mysqldumpslow -s r -t 10 slow-mysql.log

指定按哪种排序方式输出结果：-s order (c,t,l,r,at,al,ar)

c：总次数

t：总时间

l：锁的时间

r：总数据行

at,al,ar:t,l,r平均数 例如at =总时间/总次数

-t top 指定取前几条作为结束输出

pt-query-digest

pt-query-digest \\

\--explain h=127.0.0.1,u=root,p=p\@ssW0rd \\

slow-mysql.log

pt-query-digest --explain h=127.0.0.1,u=root,p=p\@ssW0rd slow-mysql.log > slow\.rep
