慢查询的概念
慢查询日志,就是指mysql记录所有执行超过long_query_time (默认的时间为10秒)参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来帮助。默认的情况下,慢查询日志是关闭的,要使用慢日志查询功能,首先要开启慢查询日志功能。
-- 查看慢查询相关的参数
show VARIABLES like'%slow_query_log%'
常用的参数介绍:
slow_query_log | 启动停止技术慢查询日志 |
slow_query_log_file | 指定慢查询日志得存储路径及文件(默认和数据文件放一起 |
long_query_time | 指定记录慢查询日志SQL执行时间得伐值(单位:秒,默认10秒) |
log_queries_not_using_indexes | 是否记录未使用索引的SQL |
log_output | 日志存放的地方【TABLE】【FILE】【FILE,TABLE】表、文件 |
启动慢查询
-- 开启慢查询日志
set GLOBAL slow_query_log= on;
-- 设置慢查询时间,这样SQL语句超过1S的都会记录到慢查询日志中。
set GLOBAL long_query_time= 1;
-- 查看超时时间设置
show VARIABLES like '%long_query_time%'
执行一些sql语句,产生一些慢查询的sql,然后查询慢查询的日志文件:
慢查询日志中记录的内容 (越下面的内容越新)
慢查询的内容解析:
行号 | 内容 |
1 | 用户名、用户的IP信息、线程ID号 |
2 | 执行花费的时间【单位:毫秒】 |
3 | 执行获得锁的时间 |
4 | 获得的结果行数 |
5 | 扫描的数据行数 |
6 | 这SQL执行的具体时间 |
7 | 具体的SQL语句 |
慢查询分析工具 mysqldumpslow
常用的慢查询日志分析工具(mysqldumpslow)
汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出。
语法:
-- 语法
mysqldumpslow -s t -t 10 C:\PergramData\mysql\data\slow-mysql.log
-s 表示按照何种方式排序
c 访问次数
l 锁定时间
r 返回记录
t 查询时间
al 平均锁定时间
ar 平均返回记录数
at 平均查询时间
-t 返回前面多少条数据
-g 后边搭配一个正则匹配模式,大小写不敏感
常用的指令:
得到返回记录集最多的10条SQL:
mysqldumpslow -s r -t 10 /var/lib/mysql/695f5026f0f6-slow.log
得到访问次数最多的10条SQL:
mysqldumpslow -s r -t 10 /var/lib/mysql/695f5026f0f6-slow.log
得到按照时间排序的前10条里面含有左连接的SQL:
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/695f5026f0f6-slow.log
也支持管道符命令
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/695f5026f0f6-slow.log | more //分页显示