一、慢查询日志是什么
- MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
- 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中,long_query_time的默认值为10,意思是运行10秒以上的语句
- 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的SQL,结合之前explain进行全面分析
二、 真实应用场景如何进行优化
- 观察,至少跑一天
- 观察慢查询日志,设置阈值,比如超过五秒钟的就是慢SQL,并将它抓取出来
- explain+慢SQL分析
- show profile
- DBA进行进行SQL数据服务器参数调优
三、SQL慢查询日志
- 查看是否开启
show variables like '%slow_query_log%'
- 开启慢查询日志
set global slow_query_log=1
这样,慢查询日志就开启了,什么样的SQL才会记录到慢查询日志中呢
- 查看当前多少秒的SQL会被记录到慢查询日志中
show variables like 'long_query_time%'
默认的慢SQL时间为10s,超过10秒就会被记录
- 设置慢查询的阈值时间
show variables like 'long_query_time%'
- 当我们设置之后,重新查询阈值时间
show variables like 'long_query_time%'
- 注意:当我们设置完成时查看,发现值还是修改前的值,这时需要重新连接或者新开一个会话才能看到修改值,或者使用下列命令查看
show global variables like 'long_query_time%'
- 查看超出阈值的SQL语句数量
show global status like '%slow_queries%'
- 打开慢SQL日志文件,查看
分析出MySQL慢查询将慢的SQL语句进行了记录,缩小了我们排查SQL语句的范围
- 注意:这些SQL语句配置的只在当前数据库生效,需要全部生效需要在my.cof文件下进行配置
[ mysqlId ]下进行配置:
slow_query_log=1
slow_query_log=/var/lib/mysql/yun-slow.log
long_query_time=3
log_output=FILE
四、日志分析工具mysqldumpslow
- 参数解释
-s, 是表示按照何种方式排序
c: 访问计数
l: 锁定时间
r: 返回记录
t: 查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
-t, 是top n的意思,即为返回前面多少条的数据
-g, 后边可以写一个正则匹配模式,大小写不敏感的
- 得到返回记录集最多的10个SQL。
mysqldumpslow -s r -t 10 yun_slow.log - 得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10yun_slow.log - 得到按照时间排序的前10条里面含有左连接的查询语句。
mysqldumpslow -s t -t 10 -g “left join” yun_slow.log - 另外建议在使用这些命令时结合 | 和more 使用 ,否则有可能出现刷屏的情况。
mysqldumpslow -s r -t 20 yun-slow.log | more