10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

5.4.5查询日志慢

慢速查询日志由SQL语句组成,占用的时间超过long_query_time执行时间至少需要几秒钟min_examined_row_limit要检查的行。慢速查询日志可用于查找执行时间较长的查询,因此可以进行优化。但是,检查长时间的查询日志可能是一项耗时的任务。为了使这更容易,您可以使用mysqldumpslow命令处理慢速查询日志文件并总结其内容。看到第4.6.10节,“mysqldumpslow -总结慢速查询日志文件”

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

查询日志参数慢

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

默认情况下,不记录管理语句,也不记录不使用索引进行查找的查询。可以使用以下命令更改此行为log_slow_admin_statements而且log_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节,“选择通用查询日志和慢速查询日志输出目的地”).

请注意

如果指定表格日志目的地,看到日志表和打开的文件太多错误

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

若要禁用或启用慢速查询日志或在运行时更改日志文件名,请使用globalslow_query_log而且slow_query_log_file系统变量。集slow_query_log为0表示禁用日志,为1表示启用日志。集slow_query_log_file指定日志文件的名称。如果日志文件已经打开,则关闭该文件并打开新文件。

服务器写入慢速查询日志的信息更少,如果您使用——log-short-format选择。

若要在慢速查询日志中包含慢速管理语句,请启用log_slow_admin_statements系统变量。管理报表包括ALTER TABLE分析表检查表创建索引指数下降优化表,修理表

若要在写入慢速查询日志的语句中包含不使用索引进行行查找的查询,请启用log_queries_not_using_indexes系统变量。(即使启用了该变量,服务器也不会记录那些不能从索引中获益的查询,因为表中只有少于两行。)

当记录不使用索引的查询时,缓慢的查询日志可能增长很快。属性设置可以对这些查询设置速率限制log_throttle_queries_not_using_indexes系统变量。默认情况下,这个变量是0,这意味着没有限制。正值对不使用索引的查询的日志记录施加每分钟的限制。第一个这样的查询会打开一个60秒的窗口,在这个窗口中,服务器记录查询到给定的限制,然后抑制其他查询。如果在窗口结束时存在抑制查询,服务器将记录一个摘要,表明有多少查询以及在这些查询中花费的总时间。当服务器记录下一个不使用索引的查询时,下一个60秒窗口开始。

服务器根据以下控制参数决定是否向慢速查询日志写入查询:

  1. 查询必须不是管理语句,或者log_slow_admin_statements必须启用。

  2. 查询必须至少使用了long_query_time秒,或log_queries_not_using_indexes必须启用且查询对行查找未使用索引。

  3. 查询必须至少检查过min_examined_row_limit行。

  4. 方法不能抑制查询log_throttle_queries_not_using_indexes设置。

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

默认情况下,副本不会将复制的查询写入慢速查询日志。要改变这一点,启用系统变量log_slow_replica_statements(来自MySQL 8.0.26)或log_slow_slave_statements(在MySQL 8.0.26之前)。注意,如果使用了基于行的复制(binlog_format =行),这些系统变量不起作用。只有当查询以语句格式记录在二进制日志中时,查询才会添加到副本的慢速查询日志中binlog_format =声明是定了,还是什么时候binlog_format =混合设置,语句将以语句格式登录。时以行格式记录的慢速查询binlog_format =混合是设置的,还是在何时记录的binlog_format =行设置时,不添加到副本的慢速查询日志中,即使log_slow_replica_statementslog_slow_slave_statements启用。

日志内容查询慢

当启用慢速查询日志时,服务器将输出写到指定的任何目的地log_output系统变量。如果启用了日志,服务器将打开日志文件并将启动消息写入其中。但是,将查询进一步记录到文件中,除非文件选中日志目的地。如果目的地是没有一个,即使启用了慢速查询日志,服务器也不会写入查询。设置日志文件名对日志记录没有影响文件未选择为输出目标。

如果启用了慢速查询日志,并且文件选择作为输出目的地,则写入日志的每个语句前面都有以字符,并具有以下字段(所有字段在一行上):

  • Query_time:持续时间

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

  • Lock_time:持续时间

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

  • Rows_sent:N

    发送到客户端的行数。

  • Rows_examined:

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

使log_slow_extra系统变量(在MySQL 8.0.14中可用)导致服务器写入以下额外字段文件除了刚刚列出的输出(表格输出不受影响)。一些字段描述引用了状态变量名。有关更多信息,请参阅状态变量描述。但是,在慢速查询日志中,计数器是每条语句的值,而不是每会话的累积值。

给定的慢速查询日志文件可能包含带有或不带有通过启用添加的额外字段的行log_slow_extra.日志文件分析器可以通过字段计数确定一行是否包含附加字段。

写入慢速查询日志文件的每条语句前面都有一个包含时间戳的语句。在MySQL 8.0.14中,时间戳表示慢速语句开始执行的时间。在8.0.14之前,时间戳表示记录慢速语句的时间(发生在语句执行完成之后)。

写入慢速查询日志的语句中的密码由服务器重写,而不是以纯文本的形式出现。看到章节6.1.2.3,“密码和日志记录”