慢查询的定义
- MySQL可以记录所有执行操作long_query_time参数设定的时间阈值的SQL语句的日志--满查询日志。该日志能为SQL语句的优化带来很好的帮助
- 默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能
启动慢查询日志
-
常用配置
- slow_query_log 启动停止记录慢查询日志
- slow_query_log_file 指定慢查询日志的存储路径及文件(默认和数据文件放在一起)
- long_queries_not_using_indexes 是否记录未使用索引的SQL
- log_output 日志存放的位置
-
查看慢查询日志信息: `SHOW VARIABLES LIKE '%slow_query_log%'
开启慢查询日志:
SET GLOBAL slow_query_log = 1;
关闭慢查询日志:
SET GLOBAL slow_query_log = 0;
慢查询日志的内容
行号 | 内容 |
---|---|
1 | 用户名、用户的IP信息、线程ID号 |
2 | 执行花费的时间 |
3 | 执行获得锁的时间 |
4 | 获得的结果行数 |
5 | 扫描的数据行数 |
6 | SQL执行的具体时间 |
7 | 具体的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可以远程的分析慢查询日志信息
-
汇总信息
总的查询时间(Exec time)
总的锁定时间(Lock time)
总的获取数据量(Rows sent)
扫描的数据量(Rows examine)
-
查询大小(Query size)
Response: 总的响应时间
time:该查询在本次分析中总的时间占比
calls:执行次数,即本次分析总共有多少条这种类型的查询语句
R/Call:平均每次执行的响应时间
Item:查询对象
- 执行计划