前言:慢查询日志是mysql的另一个调优的入口,通过定义效率慢的sql语句,然后mysql根据这个定义记录在相应的日志里面,所以就叫慢查询日志;
参数概况:
检查参数的查看:SHOW VARIABLES LIKE 'slow_query_log';
mysql> SHOW VARIABLES LIKE 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | +----------------+-------+ 1 row in set (0.00 sec)
当参数值为ON为开启,参数值为OFF为关闭; |
相关参数:
可以在/etc/my.cnf文件中修改或通过set命令来操作,详细的操作可以查看已发的文档『深入理解mysql参数』
1、慢查询日志的开关:SET GLOBAL slow_query_log=ON/OFF,通过设置ON/OFF来进行开关;
2、慢查询日志的位置:slow_query_log_file=/data/mysql,文件路径
3、指定多少秒未返回结果的语句属于慢查询:long_query_time=10,超过10s钟
4、记录所有没有使用到索引的查询语句:long-queries-not-using-indexes
5、记录那些由于查找了多于1000次而引发的慢查询:min_examined_row_limit=1000
6、记录那些慢的OPTIMIZE TABLE\ANALYZE TABLE\ALTER TABLE语句:log_slow_admin-statements
7、记录有slave所产生的慢查询:log-slow-slave-statements
参数查看:
mysql> SHOW VARIABLES LIKE 'slow_query_log'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | slow_query_log | ON | /当前系统的慢查询打开状态/ +----------------+-------+ 1 row in set (0.01 sec)
mysql> SHOW VARIABLES LIKE 'slow_query_log_file'; +---------------------+----------------------------+ | Variable_name | Value | +---------------------+----------------------------+ | slow_query_log_file | /data/mysql/mysql-slow.log | /慢查询日志的位置/ +---------------------+----------------------------+ 1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | /获取超过10S的SQL语句/ +-----------------+-----------+ 1 row in set (0.00 sec) |
例子:select sleep(15);
mysql> select sleep(14); +-----------+ | sleep(14) | +-----------+ | 0 | +-----------+ 1 row in set (14.00 sec)
mysql> quit -bash-4.1# cat /data/mysql/slow-log /usr/local/mysql/bin/mysqld, Version: 5.5.36-log (Source distribution). started with: Tcp port: 3306 Unix socket: /tmp/mysql.sock Time Id Command Argument # Time: 140904 17:39:36 # User@Host: root[root] @ localhost [] # Query_time: 14.000705 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1409823576; select sleep(14); ---这就是抓取的慢查询日志 |
总结:在实际的生产系统中,慢查询日志一般是不启用的;
如果需要的话一般都开启一段时间跟踪系统中的缓慢语句;
生产系统中该日志也会不断的增长,可以通过操作系统命令进行删除;
当慢查询日志很大的情况下,可以通过工具进行分析,分析的工具有Mysqldumpslow、mysqlsla等
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本文作者:JOHN 某上市公司DBA
数据库技术群:367875324 (该群有诸多公司的IT负责人,加入请备注数据库管理 )
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++