为什么要减少MySQL中的wait_timeout配置参数?

Usm*_*kil 6 mysql jdbc waits

问题

我正在开发一个使用 Apache Tomcat 中的连接池与 MySQL 进行通信的应用程序。我想知道为什么要使用比默认值 28,800 秒更小的wait_timeout ?我发现减少等待超时有很多缺点,但是有什么优点呢?

背景

参数wait_timeout定义为

服务器在关闭非交互式连接之前等待该连接上的活动的秒数。

问题

如果我将 wait_timeout 设置得太小,那么 MySQL 将终止我的 Web 应用程序正在使用的连接池中仍然有效的连接。在我的情况下,我是当前在任何时候使用该应用程序的唯一人,因此当我不测试它时,数据库连接自然会处于空闲状态。我可以通过简单地将 MySQL 上的 wait_timeout 延长到非常大的值来解决这个问题,这样即使我离开办公桌 2 周,池也永远不会返回死连接。

问题

  • 为什么有人想要更短的 wait_time?
  • 存储连接的开销有那么糟糕吗?
  • 尽管我了解连接池减轻了创建连接的开销,但将空闲连接保留在内存中是否是一个问题?

Rol*_*DBA 4

你应该可以延长 wait_timeout

注意 MySQL 5.05.15.55.6的 wait_timeout 最大值

  • Linux:31536000 秒(365 天,一年)
  • Windows:2147483 秒(2^31 毫秒,24 天 20 小时 31 分 23 秒)

这些最大值不会存在,因为 mysqld 无法处理它们。

连接池仅节省了替代方案的开销:为新的数据库连接销毁并重新分配内存。这可能会导致数据库服务器上的操作系统进行更多的交换来处理内存。

我一年多前写过这个:打开和关闭数据库连接的成本有多大?

降低 wait_timeout 肯定会让 Apache 陷入混乱,因为当数据库连接决定提前终止并且没有警告时,数据库连接的 PHP 和 Apache 对象仍然实例化。在这种情况下,您可能必须扫描端口 3306 或 MySQL 正在使用的任何端口上的netstat任何TIME_WAIT连接。

如果这种情况存在并阻碍 Apache 打开新连接,您将必须自己终止 TIME_WAIT。请参阅我的Feb 01, 2012ServerFault 帖子MySQL lowering wait_timeout value to lower number of open Connections了解如何执行此操作。