【问题标题】:Persistent Database Connection in PHPPHP 中的持久数据库连接
【发布时间】:2012-07-19 15:50:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果它创建 10000 个非持久连接,你的表现会如何!!
  • 对于 10k 连接我会使用负载平衡 mysql 集群
  • 你的意思是 10k 唯一查询,如果结果没有改变,之前提交的查询可能会被缓存,所以它会更快地返回结果并继续下一个查询

标签: php mysql pdo mysqli persistent-connection


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2010-11-10
      • 1970-01-01
      • 2015-06-09
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多