【发布时间】:2009-07-21 03:09:10
【问题描述】:
我过去听说持久连接不适合在高流量 Web 服务器上使用。这是真的,还是只适用于 apache 的 prefork 模式? CGI模式会不会有这个问题?
这涉及 PHP、Apache 和 Postgresql。
【问题讨论】:
标签: apache postgresql
我过去听说持久连接不适合在高流量 Web 服务器上使用。这是真的,还是只适用于 apache 的 prefork 模式? CGI模式会不会有这个问题?
这涉及 PHP、Apache 和 Postgresql。
【问题讨论】:
标签: apache postgresql
Are PHP persistent connections evil ? -- 在 PHP 和 MySQL 的上下文中。
使用持久连接的原因当然是减少连接的数量,这些连接相当昂贵,尽管 MySQL 比大多数其他数据库快得多。
持久连接的第一个问题...
如果您每秒建立数千个连接,通常不会长时间保持打开状态,但操作系统会。根据 TCP/IP 协议,端口不能立即回收,必须在“FIN”阶段等待一段时间才能回收。
第二个问题...使用了太多的 MySQL 服务器连接。
有些人根本没有意识到您可以增加 max_connections 变量并获得超过 100 个与 MySQL 的并发连接,其他人则被较旧的 Linux 问题所击败,即无法与 MySQL 建立超过 1024 个连接。
现在让我们谈谈为什么在 mysqli 扩展中禁用持久连接。即使您可能会滥用持久连接并获得糟糕的性能,但这并不是原因。真正的原因是——你可能会遇到更多问题。
在 MySQL 3.22/3.23 期间,PHP 中添加了持久连接,当时 MySQL 足够简单,因此您可以轻松地回收连接而不会出现任何问题。然而,在后来的版本中出现了一些问题——如果你回收有未提交事务的连接,你就会遇到麻烦。如果您碰巧使用自定义字符集设置回收连接,那么您又会遇到麻烦,更不用说可能会更改每个会话变量。
【讨论】:
使用持久连接的一个问题是它不能很好地扩展。如果你有 5000 人连接,你需要 5000 个持久连接。如果您消除对持久性的需求,您可能能够为 10000 人提供相同数量的连接,因为他们能够在不使用这些连接时共享这些连接。
【讨论】: