本文正在参加「技术专题19期 漫谈数据库技术」活动
当我们实际工作中,经常碰到某个功能或者某个接口需要很久才能返回结果,有时候我们怀疑是网络问题,如果排除了网络问题,我们们就应该去确定是不是慢查询导致的。
1.定位慢查询主要的两种方式
- 查看慢查询日志确定已经执行完的慢查询
- show processlist 查看正在执行的慢查询
2.查看是否开启慢日志查询
show GLOBAL VARIABLES LIKE "slow_query_log"
查询结果:默认是关闭的
开启慢查询日志:
set global slow_query_log = on;
开启之后:
3.查看设置慢查询时间阀值(单位是秒)
show GLOBAL VARIABLES LIKE "long_query_time"
设置慢查询时间阀值:
set global long_query_time = 1;
设置之后:
一般测试环境建议 long_query_time 设置的阀值比生产环境的小,比如生产环境是 1 秒,则测试环境建议配置成 0.5 秒。便于在测试环境及时发现一些效率低的 SQL。
4.确定慢查询日志文件路径
show global variables like "datadir"
结果如下:
5.确定慢查询日志文件名字
show global variables like "slow_query_log_file"
结果如下:
6.show processlist查看正在执行慢查询的语句
有时慢查询正在执行,已经导致数据库负载偏高了,而由于慢查询还没执行完,因此慢查询日志还看不到任何语句。此时可以使用 show processlist 命令判断正在执行的慢查询。show processlist 显示哪些线程正在运行。
这里对上面结果解释一下:
- Time:表示执行时间
- Info:表示 SQL 语句
我们可以通过Time字段来判断执行的查询是不是慢查询
7.慢查询分析
准备数据包t1
分析查询结果:
采用explain关键字,可以分析查询语句的执行信息
分析一下字段
type字段