官方文档:
https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
1、
慢查询语句由SQL语句组成,这些语句执行时间要超过 long_query_time 参数设置后,并且扫描行数要超过 min_examined_row_limit 参数设置后,才被会记录。
long_query_time 默认值是10,最小值可以设置为0
min_examined_row_limit 默认值是0
2、
获取锁的时间不算做执行时间,(这个锁包括行锁和MDL锁),语句在等待锁释放后,并且执行完成后,才会写入到慢查询日志中,因此日志顺序可能和执行顺序是不一样的。
3、
log_slow_admin_statements 数据库管理语句( ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,和 REPAIR TABLE。)
这个参数默认是OFF,但optimize table命令执行时间超过慢查询
log_queries_not_using_indexes 数据库查询不走索引的语句
默认情况下这两个参数都是关闭的。
4、
--slow_query_log 参数值是0或1
这个参数默认是关闭的,如果这个参数未设置值或设置的值为1,代表慢查询打开。
5、
slow_query_log_file=file_namelog_output
host_name-slow.loglog_throttle_queries_not_using_indexes
当开启log_queries_not_using_indexes 参数后,慢查询日志可能会迅速增涨,通过设置log_throttle_queries_not_using_indexes 变量,可以限制记录这类查询数量 ,默认情况下,这个参数值为0,代表着不限制,修改此参数为其它值后,记录第一个查询后,会开启一个60秒的窗口期,如果存在被限制的查询,在60秒窗口期过后,slow_log中会记录一个摘要,该摘要显示有多少查询以及在这些查询中花费的总时间。当服务器记录下一个不使用索引的查询时,下一个60秒窗口期开始。
修改此参数为2,
连接执行n次,select * from t1; --这种语句肯定是全表扫描,不走索引。
slow_log中只会记录前两次,后边的不做记录,
过一分钟后,我再继续执行select * from t1;发现还没做记录
我执行select * from t2; 发现摘要信息出现了【throttle: 4 ‘index not used‘ warning(s) suppressed.;】
7、
慢查询根据以以下顺序,决定是否记录到慢查询中:
该查询必须不是管理语句,或者 log_slow_admin_statements 必须启用。
该查询必须至少花费了 long_query_time几秒钟的时间,或者 log_queries_not_using_indexes 必须启用并且该查询未使用任何索引进行行查找。
该查询必须至少检查了 min_examined_row_limit 行。
不得根据log_throttle_queries_not_using_indexes 设置禁止查询 。
8、
log_timestamps 参数决定了写入慢查询日志中的时间,以及一般查询日志和错误日志。
9、
服务器不记录查询缓存处理的查询。
10、
默认情况下,慢查询不记录从主库同步过来执行的慢SQL,要修改此设置,需要启用log_slow_slave_statements变量,如果binlog_for=row则无效,仅在binlog_format=STATEMENT设置或何时binlog_format=MIXED设置并且以语句格式记录语句才有效。
11、
开启慢查询后,慢查询记录到文件或slow_log表中是由log_output 参数决定的,如果是FILE,就记录到文件中,如果是TABLES就记录到mysql.slow_log表中。如果是NONO,即使开启了慢查,也不会做记录。
12、
如果启用了慢查询日志并将FILE其选择为输出目标,则写入日志的每个语句都以一行开头,该行以#字符开头 并具有以下字段(所有字段都在一行上):
Query_time: duration
语句执行时间,以秒为单位。
Lock_time: duration
获取锁的时间(以秒为单位)。(包含行锁和MDL锁时间)
Rows_sent: N
发送给客户端的行数。
Rows_examined:
服务器层检查的行数(不计算存储引擎内部的任何处理)。
写入慢速查询日志文件的每个语句之前都有一个SET 包含时间戳的语句,该时间戳记指示慢速语句的记录时间(该语句在执行完成之后发生)。
原文:https://www.cnblogs.com/nanxiang/p/13058306.html