MySQL三大日志之慢查询日志

慢查询日志

慢速查询日志由执行时间超过long_query_time秒的SQL语句组成,这些语句至少需要检查min_examined_row_limit行(即检查的行数少于此数目的查询不会被记录到慢速查询日志,默认值为0)。

慢查询日志可用于查找执行时间较长的查询,因此可以作为优化的候选对象。但是,检查较长的慢查询日志可能是一项耗时的任务。为了使此操作更容易,您可以使用 mysqldumpslow命令来处理慢速查询日志文件并总结其内容。

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

慢查询日志参数

 long_query_time最小值和默认值分别为010

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

默认情况下,慢速查询日志是禁用的。要明确指定初始慢查询日志状态,请使用
--slow_query_log[={0|1}]。

--slow_query_log不带参数或参数为1时,启用日志。

--slow_query_log参数为0时,禁用日志。要指定日志文件名,请使用

--slow_query_log_file=file_name。

要指定日志存储位置,使用log_output系统变量。

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

查看慢查询的配置,可以使用show variables like ‘slow_query%’;语句

例:


mysql> show variables like 'slow_query%';
+---------------------+---------------------------+
| Variable_name       | Value                     |
+---------------------+---------------------------+
| slow_query_log      | ON                        |
| slow_query_log_file | /usr/mysql/local-slow.log |
+---------------------+---------------------------+
2 rows in set (0.00 sec)

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

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

要在慢速查询日志中包含慢速管理语句,请启用log_slow_admin_statements系统变量。管理语句包括ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、optimization TABLE和REPAIR TABLE。

如果想要在慢查询中包含不使用索引的查询,需要启用log_queries_not_using_indexes系统变量。注意,当记录不使用索引的查询时,慢查询日志可能会快速增长。

服务器按照以下顺序使用控制参数来决定是否向慢速查询日志写入查询:

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_slow_slave_statements 系统变量。注意,如果正在使用基于行的复制(binlog_format=ROW),则log_slow_slave_statements无效。只有在二进制日志中以语句格式记录查询时,才会将查询添加到副本的慢速查询日志中,也就是说,当设置了binlog_format= statement,或者设置了binlog_format=MIXED并且以语句格式记录语句时的慢查询才会记录到慢查询日志。

慢查询日志内容

当启用慢速查询日志时,服务器将输出写入由log_output系统变量指定的目的地。如果启用日志,服务器将打开日志文件并向其写入启动消息。但是,除非选择了文件日志目标,否则不会对文件进行进一步的查询日志记录。

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

Query_time: duration

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

Lock_time: duration

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

Rows_sent: N

发送给客户端的行数。

Rows_examined:

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

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

猜你喜欢

转载自blog.csdn.net/qq_36551991/article/details/111825552