From 862422c1f373c082d10d5d487339397c4e58c536 Mon Sep 17 00:00:00 2001 From: ekexium Date: Tue, 23 Sep 2025 12:16:29 +0800 Subject: [PATCH] update description of max_execution_time Signed-off-by: ekexium --- best-practices/java-app-best-practices.md | 2 +- develop/dev-guide-connection-parameters.md | 2 +- develop/dev-guide-timeouts-in-tidb.md | 4 ++-- system-variables.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/best-practices/java-app-best-practices.md b/best-practices/java-app-best-practices.md index a74e1036da70..bd54e2719efd 100644 --- a/best-practices/java-app-best-practices.md +++ b/best-practices/java-app-best-practices.md @@ -192,7 +192,7 @@ TiDB 提供以下与 MySQL 兼容的超时控制参数: - `wait_timeout`:控制与 Java 应用连接的非交互式空闲超时时间。在 TiDB v5.4 及以上版本中,默认值为 `28800` 秒,即空闲超时为 8 小时。在 v5.4 之前,默认值为 `0`,即没有时间限制。 - `interactive_timeout`:控制与 Java 应用连接的交互式空闲超时时间,默认值为 8 小时。 -- `max_execution_time`:控制连接中 SQL 执行的超时时间,仅对“只读”语句生效,默认值是 `0`,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 +- `max_execution_time`:控制连接中 SQL 执行的超时时间,仅对 `SELECT` 语句(包括 `SELECT ... FOR UPDATE`)生效,默认值是 `0`,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 但在实际生产环境中,空闲连接和一直无限执行的 SQL 对数据库和应用都有不好的影响。你可以通过在应用的连接字符串中配置这两个参数来避免空闲连接和执行时间过长的 SQL 语句。例如,设置 `sessionVariables=wait_timeout=3600`(1 小时)和 `sessionVariables=max_execution_time=300000`(5 分钟)。 diff --git a/develop/dev-guide-connection-parameters.md b/develop/dev-guide-connection-parameters.md index 5bed4a7c638f..4c0ba1592a31 100644 --- a/develop/dev-guide-connection-parameters.md +++ b/develop/dev-guide-connection-parameters.md @@ -246,7 +246,7 @@ UPDATE `t` SET `a` = 12 WHERE `id` = 3; #### 超时参数 -TiDB 提供两个与 MySQL 兼容的超时控制参数,[`wait_timeout`](/system-variables.md#wait_timeout) 和 [`max_execution_time`](/system-variables.md#max_execution_time)。这两个参数分别控制与 Java 应用连接的空闲超时时间和连接中 SQL 执行的超时时间,即控制 TiDB 与 Java 应用的连接最长闲多久和最长忙多久。在 TiDB v5.4 及以上版本中,`wait_timeout` 参数默认值为 `28800` 秒,即空闲超时为 8 小时。在 v5.4 之前,`wait_timeout` 参数的默认值为 `0`,即没有时间限制。 `max_execution_time` 参数的默认值为 `0`,即不限制一条 SQL 语句的执行时间。 +TiDB 提供两个与 MySQL 兼容的超时控制参数,[`wait_timeout`](/system-variables.md#wait_timeout) 和 [`max_execution_time`](/system-variables.md#max_execution_time)。这两个参数分别控制与 Java 应用连接的空闲超时时间和连接中 SQL 执行的超时时间,即控制 TiDB 与 Java 应用的连接最长闲多久和最长忙多久。在 TiDB v5.4 及以上版本中,`wait_timeout` 参数默认值为 `28800` 秒,即空闲超时为 8 小时。在 v5.4 之前,`wait_timeout` 参数的默认值为 `0`,即没有时间限制。 `max_execution_time` 参数的默认值为 `0`,即不限制一条 SQL 语句的执行时间,该参数适用于所有 `SELECT` 语句(包括 `SELECT ... FOR UPDATE`)。 但是 [`wait_timeout`](/system-variables.md#wait_timeout) 的默认值比较大,在事务已启动但未提交或回滚的情况下,你可能需要更细粒度的控制和更短的超时,以避免持有锁的时间过长。此时,你可以使用 TiDB 在 v7.6.0 引入的 [`tidb_idle_transaction_timeout`](/system-variables.md#tidb_idle_transaction_timeout-从-v760-版本开始引入) 控制用户会话中事务的空闲超时。 diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 652d70aad04c..61d60d1c4e28 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -48,7 +48,7 @@ TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新 ## SQL 执行时间超时 -TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对“只读”语句生效:`max_execution_time`,它的默认值为 0,表示无限制。`max_execution_time` 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 +TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对 `SELECT` 语句(包括 `SELECT ... FOR UPDATE`)生效:`max_execution_time`,它的默认值为 0,表示无限制。`max_execution_time` 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 ## JDBC 查询超时 @@ -62,6 +62,6 @@ TiDB 提供了三个与 MySQL 兼容的超时控制参数: - **wait_timeout**,控制与 Java 应用连接的非交互式空闲超时时间。在 TiDB v5.4 及以上版本中,默认值为 `28800` 秒,即空闲超时为 8 小时。在 v5.4 之前,默认值为 `0`,即没有时间限制。 - **interactive_timeout**,控制与 Java 应用连接的交互式空闲超时时间,默认值为 8 小时。 -- **max_execution_time**,控制连接中 SQL 执行的超时时间,仅对“只读”语句生效,默认值是 0,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 +- **max_execution_time**,控制连接中 SQL 执行的超时时间,仅对 `SELECT` 语句(包括 `SELECT ... FOR UPDATE`)生效,默认值是 0,即允许连接无限忙碌(一个 SQL 语句执行无限的长的时间)。 但在实际生产环境中,空闲连接和一直无限执行的 SQL 对数据库和应用都有不好的影响。你可以通过在应用的连接字符串中配置这两个 session 级的变量来避免空闲连接和执行时间过长的 SQL 语句。例如,设置 `sessionVariables=wait_timeout=3600(1 小时)`和 `sessionVariables=max_execution_time=300000(5 分钟)`。 diff --git a/system-variables.md b/system-variables.md index 6d4cacbbc0ce..b0f4f78adce9 100644 --- a/system-variables.md +++ b/system-variables.md @@ -617,7 +617,7 @@ mysql> SELECT * FROM t1; > **注意:** > -> - 在 v6.4.0 之前,`max_execution_time` 对所有类型的语句生效。从 v6.4.0 开始,该变量只用于控制只读语句的最大执行时长。实际精度在 100ms 级别,而非更准确的毫秒级别。 +> - 在 v6.4.0 之前,`max_execution_time` 对所有类型的语句生效。从 v6.4.0 开始,该变量仅用于控制 `SELECT` 语句的最大执行时长。实际精度在 100ms 级别,而非更准确的毫秒级别。 > - 对于使用了 [`MAX_EXECUTION_TIME`](/optimizer-hints.md#max_execution_timen) Hint 的 SQL 语句,这些语句的最长执行时间将不受该变量限制,而是由该 Hint 进行限制。你也可以使用该 Hint 来创建 SQL 绑定,详情请参考 [SQL 操作常见问题](/faq/sql-faq.md#如何阻止特定的-sql-语句执行或者将某个-sql-语句加入黑名单)。 ### `max_prepared_stmt_count`