已达到 PHP 最大数据库连接数 - 使用 Kohana/ORM 启动连接

Posted

技术标签:

【中文标题】已达到 PHP 最大数据库连接数 - 使用 Kohana/ORM 启动连接【英文标题】:PHP max DB connections reached - using Kohana/ORM to initiate connections 【发布时间】:2012-04-06 03:56:29 【问题描述】:

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

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

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

    一个数据库连接池(呃,这在 PHP 中是不可能的吧?) 当失败是由于最大连接时重试失败的连接 达到的连接数

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

有什么我没有想的吗?


编辑

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

如果连接限制为 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,那么您就可以开始了。

【讨论】:

MySQL 作为 AWS RDS 实例运行,我不相信我什至可以选择配置它,这是他们设置的限制。我只能升级到更大的服务器。

以上是关于已达到 PHP 最大数据库连接数 - 使用 Kohana/ORM 启动连接的主要内容,如果未能解决你的问题,请参考以下文章

监控总是显示数据库连接达到上限怎么回事

已达到调试最大连接池

tomcat 7.0支持的最大活动websocket连接数是多少

Wordpress 抛出“已达到您可以创建的最大数据库数,因此无法继续安装。”

mysql默认最大连接数是多少

MySQL最大连接数设置