2

在我们基于 PHP 的 Web 应用程序的负载测试中,我们可以轻松地达到最大连接数 150 的 DB 硬限制。我们使用 ORM 运行 Kohana 来管理数据库连接。

这会导致连接异常(从而导致事务失败),mysql_pconnect 似乎表现更差。

我们正在寻找一种在负载下优雅降级的解决方案。考虑的选项:

  1. 一个数据库连接池(嗯,这对 PHP 来说是不可能的吧?)
  2. 当失败是由于达到最大连接数时重试失败的连接

2 似乎合乎逻辑,但 Kohana/ORM 管理 DB 连接过程。我们可以以某种方式配置它吗?

有什么我没有想到的吗?


编辑

这是一个 Amazon AWS RDS 数据库实例,Amazon 为我设置了 150 个限制,并且服务器肯定配置正确。我只想确保在使用我使用的任何数据库的负载下优雅降级。显然,我总是可以升级数据库并拥有更高的连接限制,但我想防止出现故障,以防我们意外达到限制。负载下的优雅降级。

4

2 回答 2

2

当您说负载测试时,我假设您正在推送大约 150 个并发请求,而不是因为您在同一个请求中建立了多个连接而达到了连接限制。如果是这样,请查看mysql_pconnect。要在 Kohana 中启用它,只需在 config/database 文件中为您的连接启用 persistent = true 即可。

如果这不起作用,那么您将不得不找到一个允许更多连接的亚马逊产品,因为 PHP 不会在线程之间共享资源。

回答了您关于 PHP 数据库连接池的问题。

于 2012-04-06T04:42:11.607 回答
0

如果连接限制为 150(max_connections的默认值为 151),您很可能在没有配置文件的情况下运行 mysql

您将需要创建一个配置文件来提高该数字

创建 /etc/my.cnf 并放入这两行

[mysqld]
max_connections=300

您不必重新启动 mysql(如果您愿意,可以)

你可以运行这个 MySQL 命令来动态提升它

SET GLOBAL max_connections = 300;

更新 2012-04-06 12:39 EDT

尝试使用mysql_pconnect而不是 mysql_connect。如果 Kohana 可以配置为使用 mysql_pconnect,那么您就可以开始了。

于 2012-04-06T04:31:48.880 回答