开启慢查询日志,可以让 MySQL 记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,可以更好的优化 MySQL 的性能
参数说明
slow_query_log: 慢查询开启状态(on/off)
slow_query_log_file: 慢查询日志存放位置(该目录需要 MySQL 的运行账号可写权限,一般设置为 MySQL 的数据存放目录)
long_query_time: 查询超过多少秒才记录
设置步骤
1. 查看慢查询相关参数
2. 设置
mysql> show variables like 'slow_query%';
+---------------------+--------------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------------+
| slow_query_log | OFF |
| slow_query_log_file | /var/lib/mysql/9e598ca46b66-slow.log |
+---------------------+--------------------------------------+
2 rows in set (0.00 sec)
mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
全局变量设置
开启慢查询
mysql > set global slow_query_log = 'ON';
设置慢查询日志存放位置
mysql > set global slow_query_log_file = '/var/lib/mysql/slow.log';
设置超时时间
mysql > set global long_query_time = 2;
ps1: 使用命令
set global long_query_time = 2
修改后,需要重新连接或新开一个会话才能看到修改值
ps2: 不知道为啥,我用全局设置的方法总是写不了慢查询日志,重启也不行
配置文件设置
修改配置文件 my.cnf,在 [mysqld] 下添加
重启 MySQL 服务
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 2
service mysqld restart
慢查询分析
mysqldumpslow -s [Parameter] -t [Parameter] /var/lib/mysql/slow.log
参数
-s : 排序方式
c:query 执行的次数
t:sql 执行的时间
l:lock 锁表的时间
r:sql 返回的行数
-t: top,返回前 n 条数据
-g: 正则匹配,大小写不敏感
返回执行时间最长的前两个 query
mysqldumpslow -s t -t 2 /var/lib/mysql/slow.log
显示执行次数最多的前两个 query
mysqldumpslow -s c -t 2 /var/lib/mysql/slow.log
返回按照时间排序的前 10 条里面含有左连接的查询语句
mysqldumpslow - s t - t 10 - g "left join" / database / mysql / slow - log
来源: http://www.jianshu.com/p/b2dbbad7db1f