已达到 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连接数是多少