mysql_connect VS mysql_pconnect [已关闭]
我有这个疑问,我在网上搜索过,答案似乎是多样化的。通过 PHP 连接到数据库时,使用mysql_pconnect而不是mysql_connect是否更好?我读到pconnect的规模要好得多,但另一方面,作为一个持久的连接......同时拥有10 000个连接,所有连接都是持久的,对我来说似乎无法扩展。
提前致谢。
我有这个疑问,我在网上搜索过,答案似乎是多样化的。通过 PHP 连接到数据库时,使用mysql_pconnect而不是mysql_connect是否更好?我读到pconnect的规模要好得多,但另一方面,作为一个持久的连接......同时拥有10 000个连接,所有连接都是持久的,对我来说似乎无法扩展。
提前致谢。
对于MySQL来说,持久连接应该是不必要的。在其他数据库(如Oracle)中,建立连接既昂贵又耗时,因此,如果您可以重用连接,那将是一个巨大的胜利。但是这些品牌的数据库提供了连接池,这以更好的方式解决了问题。
与其他品牌相比,与MySQL数据库建立连接的速度很快,因此使用持久连接对MySQL的好处比对另一个品牌的数据库的好处要小得多。
持久连接也有缺点。数据库服务器为每个连接分配资源,无论是否需要这些连接。因此,如果连接处于空闲状态,您会看到大量无用的资源浪费。我不知道你是否会达到10,000个空闲连接,但即使是几百个也是昂贵的。
连接具有状态,并且 PHP 请求从另一个 PHP 请求先前使用的会话中“继承”信息是不合适的。例如,临时表和用户变量通常在连接关闭时清理,但如果使用持久连接,则不会清理。同样,基于会话的设置,如字符集和排序规则。此外,还会报告会话期间最后生成的 id -- 即使那是在之前的 PHP 请求期间。LAST_INSERT_ID()
至少对于MySQL来说,持久连接的缺点可能超过了它们的好处。还有其他更好的技术来实现高可扩展性。
2014 年 3 月更新:
与其他品牌的RDBMS相比,MySQL连接速度一直很低,但它正在变得更好。
查看 http://mysqlserverteam.com/improving-connectdisconnect-performance/
在MySQL 5.6中,我们开始致力于优化代码处理连接和断开连接。这项工作在MySQL 5.7中得到了加速。在这篇博客文章中,我将首先展示我们取得的成果,然后描述我们为获得这些成果所做的工作。
阅读博客,了解更多详细信息和速度比较。
基本上,您必须平衡创建连接的成本与保持连接的成本。尽管MySQL在设置新连接方面非常快,但它仍然需要花费 - 线程设置时间以及Web服务器的TCP / IP设置时间。这在流量足够高的网站上是显而易见的。不幸的是,PHP对连接的持久性没有任何控制。因此,答案是将MySQL中的空闲超时降低很长一段路(例如降低到20秒),并增加线程缓存大小。总之,这通常效果非常好。
另一方面,应用程序需要遵守连接的状态。最好不要对会话处于什么状态做出任何假设。如果您使用临时表,那么使用 CREATE IF 不存在和截断表有很大帮助,唯一地命名它们(例如,作为 userid 包含)也是如此。交易问题更多;但是您的代码始终可以在顶部执行回滚,以防万一。