TiDB慢查询日志配置方法及关闭后仍记日志问题排查
TiDB慢查询日志相关问题解答
1. 如何配置TiDB的慢查询日志?
配置TiDB慢查询日志主要有两种方式:通过配置文件做持久化设置,或者用SQL语句实时调整(后者重启TiDB后会失效)。
通过配置文件(tidb.toml)设置
找到你的TiDB节点对应的tidb.toml配置文件,调整以下几个关键参数:
slow-query-log: 设为true开启慢查询日志,false则关闭slow-query-log-file: 指定日志文件的存储路径,默认值是tidb_slow_query.logslow-threshold: 设置慢查询的时间阈值,单位是毫秒,默认是300ms。比如你想记录所有执行时间超过500ms的查询,就把它设为500- 注意:旧版本TiDB可能用的是
log-slow-query参数,新版本已经替换为slow-query-log,如果是老版本请对应调整
修改完配置后,重启TiDB节点就能生效。
通过SQL语句实时调整
用全局变量设置的话,不需要重启TiDB就能生效:
- 开启/关闭慢查询日志:
SET GLOBAL slow_query_log = ON;或者SET GLOBAL slow_query_log = OFF; - 调整慢查询阈值:
SET GLOBAL tidb_slow_log_threshold = 500;(单位是毫秒) - 如果只想针对当前连接的会话单独设置(不影响其他会话),去掉
GLOBAL就行:SET slow_query_log = ON;
你还可以用SHOW GLOBAL VARIABLES LIKE '%slow%';查看当前所有和慢查询相关的配置,确认设置是否生效。
2. 我已将slow_query_log设置为OFF,但tidb_slow_query.log仍记录执行时间数百毫秒的查询,这是为什么?
这种情况其实挺常见的,因为TiDB的tidb_slow_query.log不止用来记录普通的慢查询,还有几种场景会自动写入日志,哪怕你把slow_query_log设为OFF:
EXPLAIN ANALYZE的执行记录:当你用EXPLAIN ANALYZE执行查询时,不管这个查询实际耗时多久,TiDB都会把它的执行计划、每一步的耗时等详细信息写入慢查询日志,方便你分析执行过程。- 计划管理相关的日志:如果你开启了TiDB的计划管理功能(比如自动绑定计划、收集计划基线),当某些查询触发了计划调整、基线生成或者验证操作时,相关的查询信息会被写入日志,哪怕它的执行时间没达到慢查询阈值。
- 会话级参数覆盖了全局设置:可能你只设置了全局的
slow_query_log = OFF,但某个会话单独执行了SET slow_query_log = ON;,这个会话里的查询就会继续被记录。你可以用SHOW SESSION VARIABLES LIKE 'slow_query_log';检查当前会话的设置。 - 内部诊断日志:极少数情况下,TiDB的内部诊断操作(比如某些性能排查工具触发的查询)也会写入这个日志文件,这类记录一般会带有特殊标记,很容易和普通查询区分开。
如果想彻底停止写入,除了确保全局和所有会话的slow_query_log都是OFF,还可以检查是否开启了tidb_enable_plan_replayer这类可能触发日志写入的参数,必要时关闭(不过关闭前要评估下会不会影响后续的问题排查)。
内容的提问来源于stack exchange,提问作者Lilian Lee
相关产品推荐
相关产品推荐

