Skip to content

Commit

Permalink
fix: wait_timeout update for the best practices (#16521)
Browse files Browse the repository at this point in the history
  • Loading branch information
Icemap authored Feb 21, 2024
1 parent 888f8f1 commit 14fe043
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
9 changes: 7 additions & 2 deletions best-practices/java-app-best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ aliases: ['/docs-cn/dev/best-practices/java-app-best-practices/','/docs-cn/dev/r
- 网络协议:客户端通过标准 [MySQL 协议](https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_PROTOCOL.html)和 TiDB 进行网络交互。
- JDBC API 及实现:Java 应用通常使用 [JDBC (Java Database Connectivity)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) 来访问数据库。JDBC 定义了访问数据库 API,而 JDBC 实现完成标准 API 到 MySQL 协议的转换,常见的 JDBC 实现是 [MySQL Connector/J](https://github.com/mysql/mysql-connector-j),此外有些用户可能使用 [MariaDB Connector/J](https://mariadb.com/kb/en/library/about-mariadb-connector-j/#about-mariadb-connectorj)
- 数据库连接池:为了避免每次创建连接,通常应用会选择使用数据库连接池来复用连接,JDBC [DataSource](https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html) 定义了连接池 API,开发者可根据实际需求选择使用某种开源连接池实现。
- 数据访问框架:应用通常选择通过数据访问框架 ([MyBatis](http://www.mybatis.org/mybatis-3/zh/index.html), [Hibernate](https://hibernate.org/)) 的封装来进一步简化和管理数据库访问操作。
- 数据访问框架:应用通常选择通过数据访问框架 ([MyBatis](https://mybatis.org/mybatis-3/zh_CN/index.html), [Hibernate](https://hibernate.org/)) 的封装来进一步简化和管理数据库访问操作。
- 业务实现:业务逻辑控制着何时发送和发送什么指令到数据库,其中有些业务会使用 [Spring Transaction](https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/transaction.html) 切面来控制管理事务的开始和提交逻辑。

![Java Component](/media/best-practices/java-practice-1.png)
Expand Down Expand Up @@ -200,7 +200,12 @@ Java 的连接池实现很多 ([HikariCP](https://github.com/brettwooldridge/Hik

### 探活配置

连接池维护到 TiDB 的长连接,TiDB 默认不会主动关闭客户端连接(除非报错),但一般客户端到 TiDB 之间还会有 LVS 或 HAProxy 之类的网络代理,它们通常会在连接空闲一定时间(由代理的 idle 配置决定)后主动清理连接。除了注意代理的 idle 配置外,连接池还需要进行保活或探测连接。
连接池维护客户端到 TiDB 的长连接的方式如下:

- v5.4 版本前,TiDB 默认不会主动关闭客户端连接,除非出现报错情况。
- 从 v5.4 起,TiDB 默认会在连接空闲超过 `28800` 秒(即 8 小时)后,自动关闭客户端连接。你可以使用 TiDB 与 MySQL 兼容的 `wait_timeout` 变量控制此超时时间,详见 [JDBC 查询超时](/develop/dev-guide-timeouts-in-tidb.md#jdbc-查询超时)文档。

此外,客户端到 TiDB 之间通常还会有 [LVS](https://en.wikipedia.org/wiki/Linux_Virtual_Server)[HAProxy](https://en.wikipedia.org/wiki/HAProxy) 之类的网络代理。这些代理通常会在连接空闲超过特定时间(由代理的 idle 配置决定)后主动清理连接。除了关注代理的 idle 配置外,连接池还需要进行保活或探测连接。

如果常在 Java 应用中看到以下错误:

Expand Down
7 changes: 6 additions & 1 deletion develop/dev-guide-connection-parameters.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@ Java 的连接池实现很多 ([HikariCP](https://github.com/brettwooldridge/Hik

### 探活配置

连接池维护到 TiDB 的长连接,TiDB 默认不会主动关闭客户端连接(除非报错),但一般客户端到 TiDB 之间还会有 [LVS](https://en.wikipedia.org/wiki/Linux_Virtual_Server)[HAProxy](https://en.wikipedia.org/wiki/HAProxy) 之类的网络代理,它们通常会在连接空闲一定时间后主动清理连接。除了注意代理的 idle 配置外,连接池还需要进行保活或探测连接。
连接池维护客户端到 TiDB 的长连接的方式如下:

- v5.4 版本前,TiDB 默认不会主动关闭客户端连接,除非出现报错情况。
- 从 v5.4 起,TiDB 默认会在连接空闲超过 `28800` 秒(即 8 小时)后,自动关闭客户端连接。你可以使用 TiDB 与 MySQL 兼容的 `wait_timeout` 变量控制此超时时间,详见 [JDBC 查询超时](/develop/dev-guide-timeouts-in-tidb.md#jdbc-查询超时)文档。

此外,客户端到 TiDB 之间通常还会有 [LVS](https://en.wikipedia.org/wiki/Linux_Virtual_Server)[HAProxy](https://en.wikipedia.org/wiki/HAProxy) 之类的网络代理。这些代理通常会在连接空闲超过特定时间(由代理的 idle 配置决定)后主动清理连接。除了关注代理的 idle 配置外,连接池还需要进行保活或探测连接。

如果常在 Java 应用中看到以下错误:

Expand Down

0 comments on commit 14fe043

Please sign in to comment.