sql慢日志用于记录执行时间超过指定阈值的SQL,对于系统性能和故障排错非常有帮助
开启sql慢日志
--开启slow log
set @@global.slow_query_log=1;
--设置slow log文件名,默认放在数据目录下
set @@global.slow_query_log_file=slow_log;
--设置将慢日志同时记录到数据表和磁盘文件中
set @@global.log_output='TABLE,FILE';
命令 | 参数 |
---|---|
slow_query_log=0|1 | 0为关闭,1为开启 |
slow_query_log_file=file_name | 指定慢日志文件名,默认名字为host_name-slow.log, 如果不是绝对路径,那么默认存放在datadir目录下 |
log_output=table|file|none | table 表示慢日志信息存放在mysql.slow_log数据表里; file 表示慢日志信息存放在磁盘文件上,由上述slow_query_log_file指定, 不指定为file,即使设置了slow_query_log_file也是无效的; none 表示即使开启了慢日志功能,也不会记录任何慢SQL |
什么SQL会记录到慢日志里
long_query_time
该参数定义一个SQL的执行时间阈值,单位为秒,默认是10,最小值为0,可以指定0.1表示100ms。
min_examined_row_limit
该参数定义一个SQL所读取的数据行数;
log_queries_not_using_indexes
该参数决定是否记录未使用索引的SQL;
log_slow_admin_statements
该参数决定是否记录管理类的命令,有 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,REPAIR TABLE,默认是不记录这一类语句到慢日志。
log_throttle_queries_not_using_indexes
该参数决定每分钟记录未使用索引的SQL的数量上限,因为未使用索引的SQL可能会非常多,导致慢日志空间增长飞快。
log_slow_slave_statements
该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。
SQL被记录到慢日志里,需要满足以下条件
1. 管理类语句不会记录,除非开启了log_slow_admin_statements;
2. 执行时间需要超过long_query_time,或者对于未使用索引的SQL,需要开启log_queries_not_using_indexes,并且记录数量在log_throttle_queries_not_using_indexes之下;
3. SQL需要读取数据行数超过min_examined_row_limit;
4. 从库的复制语句默认不记录,除非binlog格式是statement且开启log_slow_slave_statements。
mysql.slow_log表结构
标签:slow,log,MySQL,file,SQL,query,日志 From: https://www.cnblogs.com/linuxshare/p/16731805.htmldesc mysql.slow_log;