1

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

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

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

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

4

2 回答 2

1

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

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

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

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

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

于 2012-07-19T16:17:52.347 回答
1

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

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

处理 10000 个并行查询也需要一些负载平衡和数据库集群,但是,如果您尝试同时通过它推送 10k 个查询,单个数据库将因非持久连接和持久连接而过载。

于 2012-07-19T16:13:16.307 回答