MySQL高级开发–慢查询日志分析(一)–获取慢日志
标签(空格分隔): MySQL
什么是慢查询日志
- MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值得SQL,则会被记录到慢查询日志中
- 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句
- 由他来查看哪些SQL语句超过了我们预定的最大容忍限度。我们收集这种SQL,做explain的分析
怎么开启慢查询日志
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动设置这个参数。如果不是调优需要,不建议开启,开启慢查询日志,会带来一定的性能消耗
查看是否开启的命令
show variable like '%slow_query_log%';
设置慢查询开启:
set global slow_query_log = 1
注:这种设置方式,MySQL启动后会恢复到关闭状态,如果需要长期开启,需要修改配置文件。
这么设置之后,需要重新启动一个会话才能生效。
什么样的信息才会在慢查询日志中体现
执行时间大于阈值long_query_time的SQL。
查看long_query_time的信息命令:
show variables like '%long_query_time%';
怎么分析慢查询日志
- 查看超过阈值的记录数命令
show variable status like '%slow_%'
2.在生产环境上,需要抓取慢查询的SQL。分析是一个体力活,可以使用mysql提供的慢查询分析工具:mysqldumpslow。
该命名有以下几个参数:
s:是表示按照何种方式排序
c:访问次数
l:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
t:即为返回前面多少条的数据
g:后面搭配一个正则匹配模式,大小写不敏感
例如:
1.得到返回记录集最多的10个SQL
mysqldumpslow -s -r -t 10 /logs/mysql-slow.log
2.得到访问次数最多的10个SQL
mysqldumpslow -s -c -t 10 /logs/mysql-slow.log
3.得到按照时间排序的前10条里面含有做链接的查询语句
mysqldumpslow -s t -t 10 -g "left join" /logs/mysql-slow.log
4.另外建议在使用这些命令时结合|和more使用,否则又可能出现爆屏情况
mysqldumpslow -s r -t 10 /logs/mysql-slow.log | more