diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 053e3829f355..68e503fa860f 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -26,7 +26,7 @@ TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新 ## SQL 执行时间超时 -TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间:max_execution_time,它的默认值为 0,表示无限制。`max_execution_time` 目前对所有类型的 statement 生效,并非只对 SELECT 语句生效。其单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 +TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对“只读”语句生效:`max_execution_time`,它的默认值为 0,表示无限制。`max_execution_time` 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 ## JDBC 查询超时 @@ -36,6 +36,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 执行的超时时间,仅对“只读”语句生效,默认值是 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 3e713637fdbf..ba4a697fbf06 100644 --- a/system-variables.md +++ b/system-variables.md @@ -539,7 +539,7 @@ mysql> SELECT * FROM t1; > **注意:** > -> - `max_execution_time` 目前对所有类型的语句生效,并非只对 `SELECT` 语句生效,与 MySQL 不同(只对`SELECT` 语句生效)。实际精度在 100ms 级别,而非更准确的毫秒级别。 +> - `max_execution_time` 目前只用于控制只读语句的最大执行时长,实际精度在 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`