我过去曾听说持久连接不适合在高流量的Web服务器上使用。这是真的,还是只适用于apache的prefork模式? CGI模式会有这个问题吗?
这涉及PHP,Apache和Postgresql。
答案 0 :(得分:2)
Are PHP persistent connections evil ? - 在 PHP 和 MySQL 的背景下。
使用持久连接的原因当然是减少相当昂贵的连接数量,即使它们使用MySQL比使用大多数其他数据库要快得多。
持久连接的第一个问题......
如果您每秒建立数千个连接,通常不会长时间保持打开,但操作系统会这样做。根据TCP / IP协议,端口不能立即回收,并且必须花费一些时间在“FIN”阶段等待它们才能被回收。
第二个问题......使用太多的MySQL服务器连接。
有些人根本没有意识到你可以增加 max_connections 变量并与MySQL获得超过100个并发连接,其他人则遭遇旧版Linux无法与MySQL建立超过1024个连接的问题。 / p>
现在让我们谈谈为什么在mysqli扩展中禁用持久连接。即使您可能滥用持久连接并且性能不佳也不是原因。真正的原因是 - 你可能会遇到更多问题。
在MySQL 3.22 / 3.23期间,当MySQL非常简单时,可以将持久连接添加到PHP中,这样您就可以轻松地回收连接而不会出现任何问题。在以后的版本中,出现了许多问题 - 如果您回收具有未提交事务的连接,则会遇到麻烦。如果您碰巧使用自定义字符集设置回收连接,则会再次遇到麻烦,更不用说每个会话变量可能已更改。
答案 1 :(得分:0)
使用持久连接的一个问题是它不能很好地扩展。如果您连接了5000人,则需要5000个持久连接。如果您不再需要持久性,那么您可以为具有相同连接数的10000人提供服务,因为他们可以在不使用这些连接时共享这些连接。