From 8d96d239ec0c556d22afe37827eb862055b71f2c Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Tue, 20 Jun 2023 01:38:02 +0800 Subject: [PATCH 1/3] Change the doc for max_execution_time. --- develop/dev-guide-timeouts-in-tidb.md | 4 ++-- system-variables.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 28aeaf68cced..2d2a56bd21ef 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -25,7 +25,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 查询超时 @@ -35,6 +35,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 d95f8e4ae0d8..a7c4444f043d 100644 --- a/system-variables.md +++ b/system-variables.md @@ -359,7 +359,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` From 6737451c861179a943b6c2dcfe3914e023a97d05 Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Tue, 20 Jun 2023 11:46:12 +0800 Subject: [PATCH 2/3] Update develop/dev-guide-timeouts-in-tidb.md Co-authored-by: Ran --- develop/dev-guide-timeouts-in-tidb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index 2d2a56bd21ef..d355a30b91a8 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -35,6 +35,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 分钟)`。 From 0cb14b7f4b9efac3d1cf56a52bd6909cf83f34e5 Mon Sep 17 00:00:00 2001 From: Benjamin2037 Date: Tue, 20 Jun 2023 11:46:19 +0800 Subject: [PATCH 3/3] Update develop/dev-guide-timeouts-in-tidb.md Co-authored-by: Ran --- develop/dev-guide-timeouts-in-tidb.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/develop/dev-guide-timeouts-in-tidb.md b/develop/dev-guide-timeouts-in-tidb.md index d355a30b91a8..df996cd72d9c 100644 --- a/develop/dev-guide-timeouts-in-tidb.md +++ b/develop/dev-guide-timeouts-in-tidb.md @@ -25,7 +25,7 @@ TiDB 的事务的实现采用了 MVCC(多版本并发控制)机制,当新 ## SQL 执行时间超时 -TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间, 用来控制只读语句的执行时长:max_execution_time,它的默认值为 0,表示无限制。`max_execution_time`, 其单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 +TiDB 还提供了一个系统变量来限制单条 SQL 语句的执行时间,仅对“只读”语句生效:`max_execution_time`,它的默认值为 0,表示无限制。`max_execution_time` 的单位为 ms,但实际精度在 100ms 级别,而非更准确的毫秒级别。 ## JDBC 查询超时