You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TiDB慢查询日志配置方法及关闭后仍记日志问题排查

TiDB慢查询日志相关问题解答

1. 如何配置TiDB的慢查询日志?

配置TiDB慢查询日志主要有两种方式:通过配置文件做持久化设置,或者用SQL语句实时调整(后者重启TiDB后会失效)。

通过配置文件(tidb.toml)设置

找到你的TiDB节点对应的tidb.toml配置文件,调整以下几个关键参数:

  • slow-query-log: 设为true开启慢查询日志,false则关闭
  • slow-query-log-file: 指定日志文件的存储路径,默认值是tidb_slow_query.log
  • slow-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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:07:26