From 9d5d049c7311591350c21db8be4ecbabbe5088db Mon Sep 17 00:00:00 2001 From: Lynn Date: Fri, 17 Oct 2025 15:39:54 +0800 Subject: [PATCH 1/9] *: add two variables tidb_slow_log_rules and tidb_slow_log_max_per_sec --- identify-slow-queries.md | 21 ++++++++++++++++++++- system-variables.md | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index 66928ec623fd..1272c0291808 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -174,8 +174,27 @@ Slow Query 基础信息: - `Storage_from_mpp`:从 v9.0.0 开始引入,表示该语句是否从 TiFlash 读取数据。 ## 相关系统变量 - * [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 +* [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在新版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 + * 未设置 tidb_slow_log_rules + * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 + * 已设置 tidb_slow_log_rules + * 配置的规则优先生效,tidb_slow_log_threshold 将被忽略。 + * 若希望规则中仍包含 Query_time 的触发条件,可在设置规则时指定。 + * 规则匹配逻辑(多条规则之间采用 OR 关系): + * Session 作用域规则:优先匹配,如果匹配成功,则打印慢日志。 + * Global 作用域规则:仅在 Session 规则未匹配时考虑: + * 若规则指定 ConnID 并与当前 Session 的 ConnID 匹配,则使用该规则。 + * 若规则未指定 ConnID(全局通用规则),则使用该规则。 + * 显示变量的行为与普通系统变量一致。 + > + > 说明:`tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢日志控制,支持多维度指标组合条件。 + > + > 建议:在启用 `tidb_slow_log_rules` 后,同时配置 `tidb_slow_log_max_per_sec`,以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 +* [tidb_slow_log_max_per_sec](/system-variables.md#tidb_slow_log_max_per_sec):设置控制每秒打印慢日志的上限,默认值为 0。 + * 当值为 0,其表示不限制每秒打印的慢日志数量。 + * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢日志,超过部分将被丢弃,不会写入慢日志文件。 + * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 * [tidb_query_log_max_len](/system-variables.md#tidb_query_log_max_len):设置慢日志记录 SQL 语句的最大长度。默认值是 4096 byte。 * [tidb_redact_log](/system-variables.md#tidb_redact_log):设置慢日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 * [tidb_enable_collect_execution_info](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: diff --git a/system-variables.md b/system-variables.md index 93952c7a0e45..5e28ff0afc56 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5072,6 +5072,28 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 单位:毫秒 - 输出慢日志的耗时阈值,默认为 300 ms。如果查询耗时大于这个值,会视作一个慢查询,并记录到慢查询日志。注意,当日志的输出级别 [`log.level`](/tidb-configuration-file.md#level) 是 `"debug"` 时,所有查询都会记录到慢日志,不受该变量的限制。 +### `tidb_slow_log_rules` + +- 作用域:SESSION | GLOBAL +- 是否持久化到集群:是 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 默认值:"" +- 类型:字符串 +- 用于定义慢日志的触发规则,支持基于多维度指标的组合条件,实现更加灵活和精细化的日志记录控制。 +> **注意:** +> +> 建议在启用 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 后,同时配置 [`tidb_slow_log_max_per_sec`](#tidb_slow_log_max_per_sec) 以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 + +### `tidb_slow_log_max_per_sec` + +- 作用域:GLOBAL +- 是否持久化到集群:是 +- 是否受 Hint [SET_VAR](/optimizer-hints.md#set_varvar_namevar_value) 控制:否 +- 默认值:`0` +- 类型:整数型 +- 范围:`[0, 1000000]` +- 控制每秒打印慢日志每秒的次数上限,默认值 0。当该变量值为 0 时,则表示不限制每秒打印的慢日志数量。当该变量值大于 0 时,TiDB 会限制每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 + ### `tidb_slow_query_file` - 作用域:SESSION From a16078e6cd3a8eb8dbf40db45e7224f353f380b5 Mon Sep 17 00:00:00 2001 From: Lynn Date: Wed, 22 Oct 2025 17:28:29 +0800 Subject: [PATCH 2/9] *: add WRITE_SLOW_LOG hint --- identify-slow-queries.md | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index 1272c0291808..c76cecc784b5 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -173,7 +173,21 @@ Slow Query 基础信息: - `Storage_from_kv`:从 v9.0.0 开始引入,表示该语句是否从 TiKV 读取数据。 - `Storage_from_mpp`:从 v9.0.0 开始引入,表示该语句是否从 TiFlash 读取数据。 -## 相关系统变量 +## 相关变量 + +### 相关 Hint + +通过 Hit `WRITE_SLOW_LOG` 强制控制输出慢日志。 +- 不受任何阈值或触发规则限制,即无论该 SQL 是否达到慢日志打印阈值,都会打印慢日志。 +- 暂不支持强制关闭打印慢日志的方式(如 `WRITE_SLOW_LOG(FALSE)`)。 + +使用示例: +```sql +SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; +``` + +### 相关系统变量 + * [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 * [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在新版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 * 未设置 tidb_slow_log_rules @@ -199,18 +213,18 @@ Slow Query 基础信息: * [tidb_redact_log](/system-variables.md#tidb_redact_log):设置慢日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 * [tidb_enable_collect_execution_info](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: -```sql -> select tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMgk1BWM2zwAAMRnIADcVyAAxHcEQNQlOL0EBBPBbCjMJMTNfMTYJMQkzMTI4MS44NTc4MTk5MDUyMTcJdGFibGU6dCwgaW5kZXg6aWR4KGEpLCByYW5nZTpbLWluZiw1MDAwMCksIGtlZXAgb3JkZXI6ZmFsc2UJMjUBrgnQVnsA'); -+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMg | -+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| id task estRows operator info actRows execution info memory disk | -| StreamAgg_17 root 1 funcs:count(Column#7)->Column#5 1 time:10.931505ms, loops:2 372 Bytes N/A | -| └─IndexReader_18 root 1 index:StreamAgg_9 1 time:10.927685ms, loops:2, rpc num: 1, rpc time:10.884355ms, proc keys:25007 206 Bytes N/A | -| └─StreamAgg_9 cop 1 funcs:count(1)->Column#7 1 time:11ms, loops:25 N/A N/A | -| └─IndexScan_16 cop 31281.857819905217 table:t, index:idx(a), range:[-inf,50000), keep order:false 25007 time:11ms, loops:25 N/A N/A | -+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -``` + ```sql + > select tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMgk1BWM2zwAAMRnIADcVyAAxHcEQNQlOL0EBBPBbCjMJMTNfMTYJMQkzMTI4MS44NTc4MTk5MDUyMTcJdGFibGU6dCwgaW5kZXg6aWR4KGEpLCByYW5nZTpbLWluZiw1MDAwMCksIGtlZXAgb3JkZXI6ZmFsc2UJMjUBrgnQVnsA'); + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMg | + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id task estRows operator info actRows execution info memory disk | + | StreamAgg_17 root 1 funcs:count(Column#7)->Column#5 1 time:10.931505ms, loops:2 372 Bytes N/A | + | └─IndexReader_18 root 1 index:StreamAgg_9 1 time:10.927685ms, loops:2, rpc num: 1, rpc time:10.884355ms, proc keys:25007 206 Bytes N/A | + | └─StreamAgg_9 cop 1 funcs:count(1)->Column#7 1 time:11ms, loops:25 N/A N/A | + | └─IndexScan_16 cop 31281.857819905217 table:t, index:idx(a), range:[-inf,50000), keep order:false 25007 time:11ms, loops:25 N/A N/A | + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ``` 在性能测试中可以关闭自动收集算子的执行信息: From 437be1b32cb5369b8da54ab40831ebe8a73f6b0f Mon Sep 17 00:00:00 2001 From: Lynn Date: Wed, 19 Nov 2025 10:30:31 +0800 Subject: [PATCH 3/9] *: add test info and tiny update --- identify-slow-queries.md | 32 +++++++++++++++++--------------- system-variables.md | 1 + 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index c76cecc784b5..dcf7bf67f6a4 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -178,10 +178,12 @@ Slow Query 基础信息: ### 相关 Hint 通过 Hit `WRITE_SLOW_LOG` 强制控制输出慢日志。 + - 不受任何阈值或触发规则限制,即无论该 SQL 是否达到慢日志打印阈值,都会打印慢日志。 - 暂不支持强制关闭打印慢日志的方式(如 `WRITE_SLOW_LOG(FALSE)`)。 使用示例: + ```sql SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; ``` @@ -190,25 +192,25 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; * [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 * [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在新版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 - * 未设置 tidb_slow_log_rules - * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 - * 已设置 tidb_slow_log_rules - * 配置的规则优先生效,tidb_slow_log_threshold 将被忽略。 - * 若希望规则中仍包含 Query_time 的触发条件,可在设置规则时指定。 - * 规则匹配逻辑(多条规则之间采用 OR 关系): - * Session 作用域规则:优先匹配,如果匹配成功,则打印慢日志。 - * Global 作用域规则:仅在 Session 规则未匹配时考虑: - * 若规则指定 ConnID 并与当前 Session 的 ConnID 匹配,则使用该规则。 - * 若规则未指定 ConnID(全局通用规则),则使用该规则。 - * 显示变量的行为与普通系统变量一致。 + * 未设置 tidb_slow_log_rules + * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 + * 已设置 tidb_slow_log_rules + * 配置的规则优先生效,tidb_slow_log_threshold 将被忽略。 + * 若希望规则中仍包含 Query_time 的触发条件,可在设置规则时指定。 + * 规则匹配逻辑(多条规则之间采用 OR 关系): + * Session 作用域规则:优先匹配,如果匹配成功,则打印慢日志。 + * Global 作用域规则:仅在 Session 规则未匹配时考虑: + * 若规则指定 ConnID 并与当前 Session 的 ConnID 匹配,则使用该规则。 + * 若规则未指定 ConnID(全局通用规则),则使用该规则。 + * 显示变量的行为与普通系统变量一致。 > > 说明:`tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢日志控制,支持多维度指标组合条件。 > - > 建议:在启用 `tidb_slow_log_rules` 后,同时配置 `tidb_slow_log_max_per_sec`,以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 + > 建议:在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢日志规则生成的慢日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 * [tidb_slow_log_max_per_sec](/system-variables.md#tidb_slow_log_max_per_sec):设置控制每秒打印慢日志的上限,默认值为 0。 - * 当值为 0,其表示不限制每秒打印的慢日志数量。 - * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢日志,超过部分将被丢弃,不会写入慢日志文件。 - * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 + * 当值为 0,其表示不限制每秒打印的慢日志数量。 + * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢日志,超过部分将被丢弃,不会写入慢日志文件。 + * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 * [tidb_query_log_max_len](/system-variables.md#tidb_query_log_max_len):设置慢日志记录 SQL 语句的最大长度。默认值是 4096 byte。 * [tidb_redact_log](/system-variables.md#tidb_redact_log):设置慢日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 * [tidb_enable_collect_execution_info](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: diff --git a/system-variables.md b/system-variables.md index 5e28ff0afc56..acfe58b1a5ab 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5080,6 +5080,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:"" - 类型:字符串 - 用于定义慢日志的触发规则,支持基于多维度指标的组合条件,实现更加灵活和精细化的日志记录控制。 + > **注意:** > > 建议在启用 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 后,同时配置 [`tidb_slow_log_max_per_sec`](#tidb_slow_log_max_per_sec) 以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 From dd348f43c0deefaba09d3460e26c1478fb65363e Mon Sep 17 00:00:00 2001 From: Lynn Date: Thu, 20 Nov 2025 16:43:06 +0800 Subject: [PATCH 4/9] *: address a comment --- system-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system-variables.md b/system-variables.md index acfe58b1a5ab..1e82f83bd3f2 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5093,7 +5093,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:`0` - 类型:整数型 - 范围:`[0, 1000000]` -- 控制每秒打印慢日志每秒的次数上限,默认值 0。当该变量值为 0 时,则表示不限制每秒打印的慢日志数量。当该变量值大于 0 时,TiDB 会限制每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 +- 控制每个 TiDB 每秒打印慢日志的次数上限,默认值 0。当该变量值为 0 时,则表示不限制每个节点每秒打印的慢日志数量。当该变量值大于 0 时,会限制每个节点每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 ### `tidb_slow_query_file` From f528b62251989632c4201133618eb4d2c4752fe9 Mon Sep 17 00:00:00 2001 From: Lynn Date: Fri, 21 Nov 2025 09:56:15 +0800 Subject: [PATCH 5/9] *: add version --- identify-slow-queries.md | 2 +- system-variables.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index dcf7bf67f6a4..0c885952a552 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -191,7 +191,7 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; ### 相关系统变量 * [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 -* [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在新版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 +* [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 * 未设置 tidb_slow_log_rules * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 * 已设置 tidb_slow_log_rules diff --git a/system-variables.md b/system-variables.md index 1e82f83bd3f2..0c37eae6ada0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5072,7 +5072,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 单位:毫秒 - 输出慢日志的耗时阈值,默认为 300 ms。如果查询耗时大于这个值,会视作一个慢查询,并记录到慢查询日志。注意,当日志的输出级别 [`log.level`](/tidb-configuration-file.md#level) 是 `"debug"` 时,所有查询都会记录到慢日志,不受该变量的限制。 -### `tidb_slow_log_rules` +### `tidb_slow_log_rules` 从 v9.0.0 版本开始引入 - 作用域:SESSION | GLOBAL - 是否持久化到集群:是 @@ -5085,7 +5085,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > > 建议在启用 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 后,同时配置 [`tidb_slow_log_max_per_sec`](#tidb_slow_log_max_per_sec) 以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 -### `tidb_slow_log_max_per_sec` +### `tidb_slow_log_max_per_sec` 从 v9.0.0 版本开始引入 - 作用域:GLOBAL - 是否持久化到集群:是 From 25f85db90ae5f6c90f25c5676ee3d7502b63c8d7 Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 4 Dec 2025 18:25:55 +0800 Subject: [PATCH 6/9] Update format --- identify-slow-queries.md | 49 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index 0c885952a552..fb659e9acfab 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -190,11 +190,11 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; ### 相关系统变量 -* [tidb_slow_log_threshold](/system-variables.md#tidb_slow_log_threshold):设置慢日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 -* [tidb_slow_log_rules](/system-variables.md#tidb_slow_log_rules):用于定义慢日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 - * 未设置 tidb_slow_log_rules +* [`tidb_slow_log_threshold`](/system-variables.md#tidb_slow_log_threshold):设置慢查询日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 +* [`tidb_slow_log_rules`](/system-variables.md#tidb_slow_log_rules):用于定义慢查询日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 + * 未设置 `tidb_slow_log_rules`: * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 - * 已设置 tidb_slow_log_rules + * 已设置 `tidb_slow_log_rules`: * 配置的规则优先生效,tidb_slow_log_threshold 将被忽略。 * 若希望规则中仍包含 Query_time 的触发条件,可在设置规则时指定。 * 规则匹配逻辑(多条规则之间采用 OR 关系): @@ -203,30 +203,31 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; * 若规则指定 ConnID 并与当前 Session 的 ConnID 匹配,则使用该规则。 * 若规则未指定 ConnID(全局通用规则),则使用该规则。 * 显示变量的行为与普通系统变量一致。 + + > 说明:`tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢查询日志控制,支持多维度指标组合条件。 > - > 说明:`tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢日志控制,支持多维度指标组合条件。 - > - > 建议:在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢日志规则生成的慢日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 + > 建议:在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢查询日志规则生成的慢查询日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 + * [tidb_slow_log_max_per_sec](/system-variables.md#tidb_slow_log_max_per_sec):设置控制每秒打印慢日志的上限,默认值为 0。 * 当值为 0,其表示不限制每秒打印的慢日志数量。 - * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢日志,超过部分将被丢弃,不会写入慢日志文件。 + * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢查询日志,超过部分将被丢弃,不会写入慢日志文件。 * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 -* [tidb_query_log_max_len](/system-variables.md#tidb_query_log_max_len):设置慢日志记录 SQL 语句的最大长度。默认值是 4096 byte。 -* [tidb_redact_log](/system-variables.md#tidb_redact_log):设置慢日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 -* [tidb_enable_collect_execution_info](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: - - ```sql - > select tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMgk1BWM2zwAAMRnIADcVyAAxHcEQNQlOL0EBBPBbCjMJMTNfMTYJMQkzMTI4MS44NTc4MTk5MDUyMTcJdGFibGU6dCwgaW5kZXg6aWR4KGEpLCByYW5nZTpbLWluZiw1MDAwMCksIGtlZXAgb3JkZXI6ZmFsc2UJMjUBrgnQVnsA'); - +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - | tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMg | - +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - | id task estRows operator info actRows execution info memory disk | - | StreamAgg_17 root 1 funcs:count(Column#7)->Column#5 1 time:10.931505ms, loops:2 372 Bytes N/A | - | └─IndexReader_18 root 1 index:StreamAgg_9 1 time:10.927685ms, loops:2, rpc num: 1, rpc time:10.884355ms, proc keys:25007 206 Bytes N/A | - | └─StreamAgg_9 cop 1 funcs:count(1)->Column#7 1 time:11ms, loops:25 N/A N/A | - | └─IndexScan_16 cop 31281.857819905217 table:t, index:idx(a), range:[-inf,50000), keep order:false 25007 time:11ms, loops:25 N/A N/A | - +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - ``` +* [`tidb_query_log_max_len`](/system-variables.md#tidb_query_log_max_len):设置慢查询日志记录 SQL 语句的最大长度。默认值是 4096 byte。 +* [`tidb_redact_log`](/system-variables.md#tidb_redact_log):设置慢查询日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 +* [`tidb_enable_collect_execution_info`](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: + + ```sql + > select tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMgk1BWM2zwAAMRnIADcVyAAxHcEQNQlOL0EBBPBbCjMJMTNfMTYJMQkzMTI4MS44NTc4MTk5MDUyMTcJdGFibGU6dCwgaW5kZXg6aWR4KGEpLCByYW5nZTpbLWluZiw1MDAwMCksIGtlZXAgb3JkZXI6ZmFsc2UJMjUBrgnQVnsA'); + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | tidb_decode_plan('jAOIMAk1XzE3CTAJMQlmdW5jczpjb3VudChDb2x1bW4jNyktPkMJC/BMNQkxCXRpbWU6MTAuOTMxNTA1bXMsIGxvb3BzOjIJMzcyIEJ5dGVzCU4vQQoxCTMyXzE4CTAJMQlpbmRleDpTdHJlYW1BZ2dfOQkxCXQRSAwyNzY4LkgALCwgcnBjIG51bTogMQkMEXMQODg0MzUFK0hwcm9jIGtleXM6MjUwMDcJMjA2HXsIMg | + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | id task estRows operator info actRows execution info memory disk | + | StreamAgg_17 root 1 funcs:count(Column#7)->Column#5 1 time:10.931505ms, loops:2 372 Bytes N/A | + | └─IndexReader_18 root 1 index:StreamAgg_9 1 time:10.927685ms, loops:2, rpc num: 1, rpc time:10.884355ms, proc keys:25007 206 Bytes N/A | + | └─StreamAgg_9 cop 1 funcs:count(1)->Column#7 1 time:11ms, loops:25 N/A N/A | + | └─IndexScan_16 cop 31281.857819905217 table:t, index:idx(a), range:[-inf,50000), keep order:false 25007 time:11ms, loops:25 N/A N/A | + +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + ``` 在性能测试中可以关闭自动收集算子的执行信息: From 4c7c4baea9fdbeab6b7366517cd82e31408c505d Mon Sep 17 00:00:00 2001 From: lilin90 Date: Thu, 4 Dec 2025 18:38:02 +0800 Subject: [PATCH 7/9] Refine wording and format --- identify-slow-queries.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index fb659e9acfab..5a4736ed45e8 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -190,26 +190,27 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; ### 相关系统变量 -* [`tidb_slow_log_threshold`](/system-variables.md#tidb_slow_log_threshold):设置慢查询日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 -* [`tidb_slow_log_rules`](/system-variables.md#tidb_slow_log_rules):用于定义慢查询日志的触发规则,支持多维度指标组合条件,实现更加灵活和精细化的日志记录控制。此变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 - * 未设置 `tidb_slow_log_rules`: - * 慢日志触发仍依赖 tidb_slow_log_threshold,Query_time 阈值取自该变量,以保持向后兼容。 - * 已设置 `tidb_slow_log_rules`: - * 配置的规则优先生效,tidb_slow_log_threshold 将被忽略。 - * 若希望规则中仍包含 Query_time 的触发条件,可在设置规则时指定。 +* [`tidb_slow_log_threshold`](/system-variables.md#tidb_slow_log_threshold):用于设置慢查询日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 +* [`tidb_slow_log_rules`](/system-variables.md#tidb_slow_log_rules):用于定义慢查询日志的触发规则,支持多维度指标组合条件,以实现更加灵活和精细化的日志记录控制。该变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 + * 如果未设置 `tidb_slow_log_rules`: + * 慢日志触发仍依赖 `tidb_slow_log_threshold`,`query_time` 阈值取自该变量,以保持向后兼容。 + * 如果已设置 `tidb_slow_log_rules`: + * 配置的规则优先生效,`tidb_slow_log_threshold` 将被忽略。 + * 若希望规则中仍包含 `query_time` 的触发条件,可在设置规则时指定。 * 规则匹配逻辑(多条规则之间采用 OR 关系): * Session 作用域规则:优先匹配,如果匹配成功,则打印慢日志。 * Global 作用域规则:仅在 Session 规则未匹配时考虑: - * 若规则指定 ConnID 并与当前 Session 的 ConnID 匹配,则使用该规则。 - * 若规则未指定 ConnID(全局通用规则),则使用该规则。 + * 若规则指定 `ConnID` 并与当前 Session 的 `ConnID` 匹配,则使用该规则。 + * 若规则未指定 `ConnID`(全局通用规则),则使用该规则。 * 显示变量的行为与普通系统变量一致。 - > 说明:`tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢查询日志控制,支持多维度指标组合条件。 + > **Tip** > - > 建议:在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢查询日志规则生成的慢查询日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 + > - `tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢查询日志控制,支持多维度指标组合条件。 + > - 在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢查询日志规则生成的慢查询日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 -* [tidb_slow_log_max_per_sec](/system-variables.md#tidb_slow_log_max_per_sec):设置控制每秒打印慢日志的上限,默认值为 0。 - * 当值为 0,其表示不限制每秒打印的慢日志数量。 +* [`tidb_slow_log_max_per_sec`](/system-variables.md#tidb_slow_log_max_per_sec):用于设置控制每秒打印慢日志的上限,默认值为 0。 + * 当值为 0 时,表示不限制每秒打印的慢日志数量。 * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢查询日志,超过部分将被丢弃,不会写入慢日志文件。 * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 * [`tidb_query_log_max_len`](/system-variables.md#tidb_query_log_max_len):设置慢查询日志记录 SQL 语句的最大长度。默认值是 4096 byte。 From 50b79fcbbe08e2d9fea44accaebf75d1511c8514 Mon Sep 17 00:00:00 2001 From: Lynn Date: Fri, 5 Dec 2025 12:12:55 +0800 Subject: [PATCH 8/9] *: address comments --- identify-slow-queries.md | 12 +++++++----- system-variables.md | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index 5a4736ed45e8..fafa68f6fc09 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -175,12 +175,14 @@ Slow Query 基础信息: ## 相关变量 +本节介绍慢查询日志相关的 Hint 与系统变量。 + ### 相关 Hint -通过 Hit `WRITE_SLOW_LOG` 强制控制输出慢日志。 +你可以通过 Hint `WRITE_SLOW_LOG` 强制控制输出慢查询日志。 -- 不受任何阈值或触发规则限制,即无论该 SQL 是否达到慢日志打印阈值,都会打印慢日志。 -- 暂不支持强制关闭打印慢日志的方式(如 `WRITE_SLOW_LOG(FALSE)`)。 +- 该 Hint 不受任何阈值或触发规则限制,即无论该 SQL 查询是否达到慢查询日志打印阈值,都会打印慢查询日志。 +- 目前只支持强制开启打印慢查询日志,暂不支持通过 `WRITE_SLOW_LOG(FALSE)`)强制关闭打印慢查询日志。 使用示例: @@ -209,10 +211,10 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; > - `tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢查询日志控制,支持多维度指标组合条件。 > - 在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢查询日志规则生成的慢查询日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 -* [`tidb_slow_log_max_per_sec`](/system-variables.md#tidb_slow_log_max_per_sec):用于设置控制每秒打印慢日志的上限,默认值为 0。 +* [`tidb_slow_log_max_per_sec`](/system-variables.md#tidb_slow_log_max_per_sec):用于设置每秒打印慢日志的上限,默认值为 0。 * 当值为 0 时,表示不限制每秒打印的慢日志数量。 * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢查询日志,超过部分将被丢弃,不会写入慢日志文件。 - * 建议在启用了 tidb_slow_log_rules 后配置该变量,以防规则触发频繁打印慢日志。 + * 建议在启用了 `tidb_slow_log_rules` 后配置该变量,以防规则触发频繁打印慢日志。 * [`tidb_query_log_max_len`](/system-variables.md#tidb_query_log_max_len):设置慢查询日志记录 SQL 语句的最大长度。默认值是 4096 byte。 * [`tidb_redact_log`](/system-variables.md#tidb_redact_log):设置慢查询日志记录 SQL 时是否将用户数据脱敏用 `?` 代替。默认值是 `0`,即关闭该功能。 * [`tidb_enable_collect_execution_info`](/system-variables.md#tidb_enable_collect_execution_info):设置是否记录执行计划中各个算子的物理执行信息,默认值是 `1`。该功能对性能的影响约为 3%。开启该项后查看 `Plan` 的示例如下: diff --git a/system-variables.md b/system-variables.md index 0c37eae6ada0..9e37e162336c 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5093,7 +5093,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:`0` - 类型:整数型 - 范围:`[0, 1000000]` -- 控制每个 TiDB 每秒打印慢日志的次数上限,默认值 0。当该变量值为 0 时,则表示不限制每个节点每秒打印的慢日志数量。当该变量值大于 0 时,会限制每个节点每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 +- 控制每个 TiDB 每秒打印慢日志的次数上限,默认值 0。当该变量值为 0 时,表示不限制每个节点每秒打印的慢日志数量。当该变量值大于 0 时,会限制每个节点每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 ### `tidb_slow_query_file` From 8af6f4bf2e139d8388e6effb1e0932b3c69f80e8 Mon Sep 17 00:00:00 2001 From: Lynn Date: Fri, 5 Dec 2025 13:12:24 +0800 Subject: [PATCH 9/9] *: tiny update --- identify-slow-queries.md | 4 ++-- system-variables.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/identify-slow-queries.md b/identify-slow-queries.md index fafa68f6fc09..9bbb236f1e1c 100644 --- a/identify-slow-queries.md +++ b/identify-slow-queries.md @@ -193,7 +193,7 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; ### 相关系统变量 * [`tidb_slow_log_threshold`](/system-variables.md#tidb_slow_log_threshold):用于设置慢查询日志的阈值,执行时间超过阈值的 SQL 语句将被记录到慢日志中。默认值是 300 ms。 -* [`tidb_slow_log_rules`](/system-variables.md#tidb_slow_log_rules):用于定义慢查询日志的触发规则,支持多维度指标组合条件,以实现更加灵活和精细化的日志记录控制。该变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 +* [`tidb_slow_log_rules`](/system-variables.md#tidb_slow_log_rules-从-v900-版本开始引入):用于定义慢查询日志的触发规则,支持多维度指标组合条件,以实现更加灵活和精细化的日志记录控制。该变量在 v9.0.0 版本中引入,逐步替代传统的单一阈值控制方式,即替代 `tidb_slow_log_threshold` 的使用。 * 如果未设置 `tidb_slow_log_rules`: * 慢日志触发仍依赖 `tidb_slow_log_threshold`,`query_time` 阈值取自该变量,以保持向后兼容。 * 如果已设置 `tidb_slow_log_rules`: @@ -211,7 +211,7 @@ SELECT /*+ WRITE_SLOW_LOG */ count(*) FROM t t1, t t2 WHERE t1.a = t2.b; > - `tidb_slow_log_rules` 用于替换单一阈值的方式,实现更灵活和精细化的慢查询日志控制,支持多维度指标组合条件。 > - 在资源充足的测试环境(1 TiDB:16C/48G,3 TiKV:16C/48G)中,多次 sysbench 测试结果表明:当多维慢查询日志规则生成的慢查询日志量处于半小时内数百万级时,对性能影响较小;但若日志量达到千万级,则会导致 TPS、延迟出现明显下降。在业务负载较高或 CPU/内存接近瓶颈时,应谨慎配置 `tidb_slow_log_rules`,避免规则过宽导致日志洪泛。建议结合 `tidb_slow_log_max_per_sec` 限制日志打印速率,以降低对业务性能的影响。 -* [`tidb_slow_log_max_per_sec`](/system-variables.md#tidb_slow_log_max_per_sec):用于设置每秒打印慢日志的上限,默认值为 0。 +* [`tidb_slow_log_max_per_sec`](/system-variables.md#tidb_slow_log_max_per_sec-从-v900-版本开始引入):用于设置每秒打印慢日志的上限,默认值为 0。 * 当值为 0 时,表示不限制每秒打印的慢日志数量。 * 当值大于 0 时,TiDB 每秒最多打印指定数量的慢查询日志,超过部分将被丢弃,不会写入慢日志文件。 * 建议在启用了 `tidb_slow_log_rules` 后配置该变量,以防规则触发频繁打印慢日志。 diff --git a/system-variables.md b/system-variables.md index 9e37e162336c..c030702790d0 100644 --- a/system-variables.md +++ b/system-variables.md @@ -5083,7 +5083,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) > **注意:** > -> 建议在启用 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 后,同时配置 [`tidb_slow_log_max_per_sec`](#tidb_slow_log_max_per_sec) 以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 +> 建议在启用 [`tidb_slow_log_rules`](#tidb_slow_log_rules-从-v900-版本开始引入) 后,同时配置 [`tidb_slow_log_max_per_sec`](#tidb_slow_log_max_per_sec-从-v900-版本开始引入) 以限制慢日志打印频率,防止基于规则的慢日志触发过于频繁。 ### `tidb_slow_log_max_per_sec` 从 v9.0.0 版本开始引入 @@ -5093,7 +5093,7 @@ Query OK, 0 rows affected, 1 warning (0.00 sec) - 默认值:`0` - 类型:整数型 - 范围:`[0, 1000000]` -- 控制每个 TiDB 每秒打印慢日志的次数上限,默认值 0。当该变量值为 0 时,表示不限制每个节点每秒打印的慢日志数量。当该变量值大于 0 时,会限制每个节点每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules) 结合使用,以防止在高负载情况下产生过多的慢日志。 +- 控制每个 TiDB 每秒打印慢日志的次数上限,默认值 0。当该变量值为 0 时,表示不限制每个节点每秒打印的慢日志数量。当该变量值大于 0 时,会限制每个节点每秒打印的慢日志数量不超过该值,超过部分的慢日志将被丢弃,不会写入慢日志文件。该变量常与 [`tidb_slow_log_rules`](#tidb_slow_log_rules-从-v900-版本开始引入) 结合使用,以防止在高负载情况下产生过多的慢日志。 ### `tidb_slow_query_file`