慢查询日志
慢查询日志用来记录所有执行时间超过long_query_time的SQL语句的日志文件,获得初始表锁定的时间不算作执行时间。使用选项--slow_query_log[={0|1}]停止或者启动它。如果没有给定file_name的值, 默认名是host_name-slow.log。使用选项--slow_query_log_file=file_name指定文件位置和文件名称。
语句执行完并且所有锁释放后记入慢查询日志。记录顺序可以与执行顺序不相同。
慢查询日志可以用来找到执行时间长的查询语句,并对其进行优化,可以使用mysqldumpslow命令获得日志中显示的查询摘要来处理慢查询日志。
慢查询日志中,不使用索引的慢查询同使用索引的查询一样记录。通过选项--log-queries-not-using-indexes,可以防止不使用索引的慢查询记入慢查询日志。通过选项--log-slow-admin-statements,可以请求将慢管理语句,例如OPTIMIZE TABLE、ANALYZE TABLE和 ALTER TABLE写入慢查询日志。通过选项--log-slow-slave-statements,可以将复制查询的语句记入慢查询日志。
在文件/etc/my.cnf中追加下面内容来设置慢查询日志
slow_query_log = ON
slow_query_log_file = /tmp/mysqlslow.log
long_query_time = 5
log-queries-not-using-indexes
log-slow-admin-statements
log-slow-slave-statements
重启mysql
[root@localhost mysql]# service mysqld restart
Shutting down MySQL... SUCCESS!
Starting MySQL... SUCCESS!
查看慢查询日志信息
# mysql -h linux -u root -proot
mysql>
show variables like '%slow%';
+---------------------+--------------------+
| Variable_name | Value |
+---------------------+--------------------+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /tmp/mysqlslow.log |
+---------------------+--------------------+
动态关闭慢查询日志
mysql> SET GLOBAL slow_query_log = 'OFF';
动态启动慢查询日志
mysql> SET GLOBAL slow_query_log = 'ON';
--清除慢查询日志
[root@localhost mysql]# cd /var/lib/mysql
[root@localhost mysql]# mv linux-slow.log linux-slow.log.old
[root@localhost mysql]# mysqladmin -h linux -u root -proot flush-logs
[root@localhost mysql]# mv linux-slow.log.old /backup/linux-slow.log.old
--使用mysqldumpslow工具检索内容
[root@localhost mysql]# mysqldumpslow /tmp/mysqlslow.log -s t -r
Reading mysql slow query log from /tmp/mysqlslow.log
Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts