MySQL慢日志选项参数有哪些

46次阅读
没有评论

共计 5851 个字符,预计需要花费 15 分钟才能阅读完成。

这篇文章给大家分享的是有关 MySQL 慢日志选项参数有哪些的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

〇 log_output
枚举型,动态参数。
用于设置 slow log 和 general log 的输出对象。
可以设置为 none,table,file,分别代表:不输出,存于表,存于文件。

并且也可以组合设置:
比如 SET GLOBAL log_output= table,file
则代表同时输出到表和文件中。

如果设置 SET GLOBAL log_output= none,file 或 none,table 或 table,file,none 均代表 none

〇 slow_query_log 与 slow_query_log_file
slow_query_log 布尔型,动态参数,默认为 OFF。
用于控制是否开启 slow log。

slow_query_log_file 动态参数,指定 slow log 文件的名称和路径。
若未设置,则 slow log 的文件名取默认值 $host_name-slow.log,存放于 $datadir 下。

〇 long_query_time
动态参数,默认值为 10。
记录执行时间(real time)超过该值以上的 SQL。

〇 log_queries_not_using_indexes 
布尔型,动态参数,默认为 OFF。
若开启,则表示记录所有未使用索引的 SQL,无论是否超过 long_query_time 所设置的值。
不遵循 long_query_time。

mysql SET SESSION long_query_time=10000;

Query OK, 0 rows affected (0.00 sec)

mysql CREATE TABLE test.slow(id int);

Query OK, 0 rows affected (0.03 sec)

mysql INSERT INTO test.slow SELECT 1;

Query OK, 1 row affected (0.01 sec)

Records: 1  Duplicates: 0  Warnings: 0

mysql SELECT * FROM test.slow WHERE id=1;

+——+

| id   |

+——+

| 1   |

+——+

1 row in set (0.00 sec)

mysql SELECT start_time, query_time,lock_time,sql_text FROM mysql.slow_log;

+—————————-+—————–+—————–+————————————+

| start_time                 | query_time     | lock_time       | sql_text                           |

+—————————-+—————–+—————–+————————————+

| 2017-11-16 15:09:32.114488 | 00:00:00.000346 | 00:00:00.000166 | SELECT * FROM test.slow WHERE id=1 |

+—————————-+—————–+—————–+————————————+

1 row in set (0.00 sec)

此时上面这一条 SQL 被记录到 slow log,并且忽略了 long_query_time 的设置。

加一个索引,再多一次查询:

mysql ALTER TABLE test.slow ADD PRIMARY KEY pk(id);

Query OK, 0 rows affected (0.14 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql SELECT * FROM test.slow WHERE id=1;

+—-+

| id |

+—-+

| 1 |

+—-+

1 row in set (0.00 sec)

mysql SELECT start_time, query_time,lock_time,sql_text FROM mysql.slow_log;

+—————————-+—————–+—————–+———————————————————————-+

| start_time               | query_time     | lock_time     | sql_text                                                           |

+—————————-+—————–+—————–+———————————————————————-+

| 2017-11-16 15:09:32.114488 | 00:00:00.000346 | 00:00:00.000166 | SELECT * FROM test.slow WHERE id=1                                 |

| 2017-11-16 15:10:50.196590 | 00:00:00.000437 | 00:00:00.000148 | SELECT start_time, query_time,lock_time,sql_text FROM mysql.slow_log |

+—————————-+—————–+—————–+———————————————————————-+

2 rows in set (0.00 sec)

可以发现第二次 SELECT 的 SQL 的没有被记录到 slow log。
至于这条查询 slow log 的语句本身被记录到 slow log,也是因为这条查 mysql.slow_log 的 SQL 没有使用到索引。

因为开启该参数造成 slow log 暴涨的案例:
http://blog.itpub.net/29773961/viewspace-1811829/

〇 log_throttle_queries_not_using_indexes
整型,动态参数,默认为 0。
如果 log_queries_not_using_indexes 开启,
那么 log_throttle_queries_not_using_indexes 用于限制每分钟所记录的 slow log 数量。
设置为 0 则表示“不限制”。

〇 log_slow_admin_statements 
布尔型,动态参数,默认为 OFF。5.7 后新增的参数。
可用于控制 slow log 是否记录数据库管理的 SQL。
若开启,则表示记录这些 SQL。
数据库管理的 SQL 包括:
ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, REPAIR TABLE。

遵循 long_query_time。

第一次执行 check table,时间超过 2 秒,但未被记录。
第二次执行 check table,开启 log_queries_not_using_indexes,超过 2 秒,被记录。

mysql SELECT @@long_query_time, @@log_queries_not_using_indexes;

+——————-+———————————+

| @@long_query_time | @@log_queries_not_using_indexes |

+——————-+———————————+

| 2.000000         | 0                             |

+——————-+———————————+

1 row in set (0.00 sec)

mysql CHECK TABLE test.t0;

+———+——-+———-+———-+

| Table   | Op   | Msg_type | Msg_text |

+———+——-+———-+———-+

| test.t0 | check | status   | OK       |

+———+——-+———-+———-+

1 row in set (4.28 sec)

mysql SET GLOBAL log_slow_admin_statements = 1;

Query OK, 0 rows affected (0.00 sec)

mysql CHECK TABLE test.t0;

+———+——-+———-+———-+

| Table   | Op   | Msg_type | Msg_text |

+———+——-+———-+———-+

| test.t0 | check | status   | OK       |

+———+——-+———-+———-+

1 row in set (4.27 sec)

mysql SELECT start_time, query_time,lock_time,sql_text FROM mysql.slow_log;

+—————————-+—————–+—————–+———————+

| start_time                 | query_time     | lock_time       | sql_text           |

+—————————-+—————–+—————–+———————+

| 2017-11-16 15:31:24.378343 | 00:00:04.271940 | 00:00:00.000134 | CHECK TABLE test.t0 |

+—————————-+—————–+—————–+———————+

1 row in set (0.00 sec)

〇 log_slow_slave_statements
布尔型,动态参数,默认为 OFF。5.7 后新增的参数。
开启后,在 slave 上将会记录超过 long_query_time 的日志记录。
即便开启了这个选项,也不会立刻生效,新的变更需要再一次 START SLAVE 后生效。

〇 min_examined_row_limit
整型,动态参数,默认为 0。
设置该值,则表示返回行数大于等于该值的 sql,将会被记录到 slow log 中。

mysql SET SESSION long_query_time=0, SESSION min_examined_row_limit=5;

Query OK, 0 rows affected (0.00 sec)

mysql SELECT * FROM test.t0 LIMIT 4;

…………

4 rows in set (0.00 sec)

mysql SELECT * FROM test.t0 LIMIT 5;

…………

5 rows in set (0.00 sec)

mysql SELECT * FROM test.t0 LIMIT 10;

…………

10 rows in set (0.00 sec)

mysql SELECT start_time, query_time,lock_time,sql_text FROM mysql.slow_log;

+—————————-+—————–+—————–+——————————–+

| start_time                 | query_time     | lock_time       | sql_text                       |

+—————————-+—————–+—————–+——————————–+

| 2017-11-17 16:08:14.851394 | 00:00:00.000286 | 00:00:00.000134 | SELECT * FROM test.t0 LIMIT 5 |

| 2017-11-17 16:08:16.744389 | 00:00:00.000284 | 00:00:00.000135 | SELECT * FROM test.t0 LIMIT 10 |

+—————————-+—————–+—————–+——————————–+

2 rows in set (0.00 sec)

个人认为大多数场景都无需刻意设置该值,取默认为 0 就好。

〇 log-short-format
默认为 FLASE,该选项仅仅为启动时选项,并不支持系统变量。
如果该选项被激活,则表示在 slow log 中记录更少的信息。

〇 log_timestamps
枚举型,动态,默认为 UTC,5.7.2 后出现。

感谢各位的阅读!关于“MySQL 慢日志选项参数有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-26发表,共计5851字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)