5.4.5 慢查询日志

慢查询日志由 SQL 语句组成,这些语句执行时间超过long_query_time秒,并且至少需要检查min_examined_row_limit行。慢查询日志可用于查找执行时间较长的查询,因此可以作为优化的候选对象。但是,检查较长的慢查询日志可能是一项耗时的任务。为了使此操作更容易,您可以使用mysqldumpslow命令来处理慢速查询日志文件并总结其内容。参见第 4.6.8 节“ mysqldumpslow-汇总慢查询日志文件”

获取初始锁的时间不算作执行时间。 mysqld在执行慢速查询日志并释放所有锁之后,将一条语句写入慢速查询日志,因此日志 Sequences 可能与执行 Sequences 不同。

慢查询日志参数

long_query_time的最小值和默认值分别为 0 和 10.可以将值指定为微秒的分辨率。

默认情况下,不记录 Management 语句,也不记录不使用索引进行查询的查询。可以使用log_slow_admin_statementslog_queries_not_using_indexes更改此行为,如稍后所述。

默认情况下,慢速查询日志是禁用的。要明确指定初始慢查询日志状态,请使用--slow_query_log[={0|1}]。没有参数或参数为 1 时,--slow_query_log启用日志。参数为 0 时,此选项禁用日志。要指定日志文件名,请使用--slow_query_log_file=file_name。要指定日志目标,请使用log_output系统变量(如第 5.4.1 节“选择常规查询日志和慢查询日志输出目标”中所述)。

Note

如果您指定TABLE日志目标,请参阅日志 table 和“打开的文件太多”错误

如果您没有为慢速查询日志文件指定名称,则默认名称为host_name-slow.log。除非给出绝对路径名以指定其他目录,否则服务器将在数据目录中创建文件。

要在运行时禁用或启用慢查询日志或更改日志文件名,请使用全局slow_query_logslow_query_log_file系统变量。将slow_query_log设置为 0 以禁用日志,或设置为 1 以启用日志。设置slow_query_log_file以指定日志文件的名称。如果日志文件已经打开,则将其关闭并打开新文件。

如果使用--log-short-format选项,则服务器将较少的信息写入慢速查询日志。

要将慢速 Management 语句包括在慢速查询日志中,请启用log_slow_admin_statements系统变量。Management 语句包括ALTER TABLEANALYZE TABLECHECK TABLECREATE INDEXDROP INDEXOPTIMIZE TABLEREPAIR TABLE

要在写入慢速查询日志的语句中包括不将索引用于行查找的查询,请启用log_queries_not_using_indexes系统变量。 (即使启用了该变量,服务器也不会记录由于 table 少于两行而无法从索引的存在中受益的查询.)

记录不使用索引的查询时,慢查询日志可能会迅速增长。通过设置log_throttle_queries_not_using_indexes系统变量可以对这些查询设置速率限制。默认情况下,此变量为 0,table 示没有限制。正值对不使用索引的查询的日志记录施加每分钟的限制。第一个这样的查询将打开一个 60 秒的窗口,服务器在该窗口中记录查询直至达到给定的限制,然后取消其他查询。如果窗口结束时存在被抑制的查询,则服务器会记录一个摘要,该摘要指示有多少个查询以及在这些查询中花费的总时间。当服务器记录下一个不使用索引的查询时,下一个 60 秒窗口开始。

服务器按以下 Sequences 使用控制参数来确定是否将查询写入慢查询日志:

log_timestamps系统变量控制写入慢速查询日志文件(以及一般查询日志文件和错误日志)的消息中时间戳的时区。它不影响写入日志 table 的常规查询日志和慢速查询日志消息的时区,但是可以使用CONVERT_TZ()或通过设置会话time_zone系统将从这些 table 中检索的行从本地系统时区转换为任何所需时区。变量。

服务器不记录查询缓存处理的查询。

默认情况下,副本服务器不将复制的查询写入慢速查询日志。要更改此设置,请启用log_slow_slave_statements系统变量。请注意,如果正在使用基于行的复制(binlog_format=ROW),则log_slow_slave_statements无效。仅当以二进制格式的语句格式记录查询时,即设置为binlog_format=STATEMENT或设置为binlog_format=MIXED且语句以语句格式记录时,查询才会添加到副本的慢速查询日志中。设置为binlog_format=MIXED时以行格式记录的慢速查询或设置为binlog_format=ROW时记录的慢速查询不会添加到副本的慢速查询日志中,即使启用log_slow_slave_statements也是如此。

查询日志内容缓慢

启用慢速查询日志后,服务器会将输出写入log_output系统变量指定的任何目标。如果启用日志,服务器将打开日志文件并向其中写入启动消息。但是,除非选择了FILE日志目标,否则不会进一步查询查询文件。如果目标是NONE,则即使启用慢速查询日志,服务器也不会写入任何查询。如果未选择FILE作为输出目标,则设置日志文件名对日志记录无效。

如果启用了慢速查询日志,并且选择了FILE作为输出目标,则写入日志的每个语句都以以#字符开头的行开头,并具有以下字段(所有字段都位于一行中):

  • Query_time: duration

语句执行时间,以秒为单位。

  • Lock_time: duration

获取锁的时间(以秒为单位)。

  • Rows_sent: N

发送给 Client 端的行数。

  • Rows_examined:

服务器层检查的行数(不计算存储引擎内部的任何处理)。

写入慢速查询日志文件的每个语句前面都有一个SET语句,该语句包含时间戳,该时间戳记指示慢速语句何时被记录(在语句完成执行之后发生)。

服务器将重写写入慢速查询日志的语句中的密码,以使之不会以纯文本形式出现。参见第 6.1.2.3 节“密码和日志记录”