分析慢SQL的步骤
1.慢查询的开启并捕获:开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,至少跑1天,看看生产的慢SQL情况,并将它抓取出来
2.explain + 慢SQL分析
3.show Profile。(比explain还要详细,可以查询SQL在MySQL数据库中的执行细节和生命周期情况)
4.运维经理 OR DBA,进行MySQL数据库服务器的参数调优。(后端程序员没有这个权限)
慢查询日志(定位慢sql)
基本介绍
慢查询日志是什么?
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time
值的SQL,则会被记录到慢查询日志中。
long_query_time
的默认值为10,意思是运行10秒以上的语句- 由慢查询日志来查看哪些SQL超出了我们的最大忍耐时间值,比如一条SQL执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒钟的SQL,结合之前
explain
进行全面分析
特别说明
**默认情况下,MySQL数据库没有开启慢查询日志,**需要我们手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。
查看慢查询日志是否开以及如何开启
- 查看慢查询日志是否开启:
SHOW VARIABLES LIKE '%slow_query_log%';
。 - 开启慢查询日志:
SET GLOBAL slow_query_log = 1;
。使用该方法开启MySQL的慢查询日志只对当前数据库生效,如果MySQL重启后会失效。1 mysql> 2 mysql> use mysql; 3 Database changed 4 mysql> show variables like '%slow_query_log%'; 5 +---------------------+-------------------------------+ 6 | Variable_name | Value | 7 +---------------------+-------------------------------+ 8 | slow_query_log | ON | 9 | slow_query_log_file | /var/lib/mysql/mysql-slow.log | 10 +---------------------+-------------------------------+ 11 2 rows in set (0.00 sec) 12 13 mysql> set global slow_query_log = 1; 14 Query OK, 0 rows affected (0.00 sec)