PHP中的持久数据库连接

时间:2012-07-19 15:50:53

标签: php mysql pdo mysqli persistent-connection

我对PHP中的持久数据库连接有些怀疑。

据我所知,使用持久连接可能非常有效,因为每个需要与同一主机/用户建立连接的PHP进程都可以共享该连接,而无需重新建立连接。

我认为最新的实现引入了克服未知连接状态问题的功能。

但是!如果我有10万个进程共享同一个连接,这将降低我的应用程序的性能,因为他们一次只能使用一个连接!这是真的还是我错了?

2 个答案:

答案 0 :(得分:1)

在任何情况下使用持久连接都会更快,因为您可以节省建立连接的开销。

使用持久连接不会将您限制为单个连接,您可以拥有100或1000个持久连接的连接池。

处理10000个并行查询也需要一些负载均衡和数据库集群,但是,如果您尝试同时通过它推送10k个查询,则单个数据库将使用非持久性和持久性连接进行重载。 / p>

答案 1 :(得分:1)

如果您实际上有10k进程查询数据库,那么持久连接提供的效率优势,特别是在建立连接时,将是巨大的。

假设您在Apache下运行PHP,第一次建立SQL连接时,Apache“子进程”将保持打开状态(即 - 持久连接)。如果连接信息当然是相同的,那么属于该特定“Apache子进程”的所有PHP请求都将重用该连接。 Apache的配置定义了一个子进程在重新启动之前可以处理的请求数 - 这应该清除持久连接。

现在,还有一种情况是你在循环中运行查询甚至 - 我敢说,这是一个无限循环。在这种情况下,即使是非持久性连接也是致命的。

使用持久连接的进程数量是服务器效率的一个因素是值得怀疑的(除非,正如我所提到的,你有一些使用查询的无效代码)。应该关注的是你应该允许多少持久连接以及你的数据库/服务器可以处理多少?

持久连接的MySQL手册http://php.net/manual/en/features.persistent-connections.php也涵盖了我刚刚总结的大部分(以及更多)内容。