Php MySQLi持久连接填充并发用户

Php MySQLi持久连接填充并发用户,php,mysql,mysqli,Php,Mysql,Mysqli,我为一家公司工作,该公司最近将一个站点的PHP代码从vanilla MySQL更新为MySQLi,以提前进行弃用更改 MySQL在网络级别使用64k的源TCP端口时出现了一些问题,并且出现了问题。我们通过启用持久连接修复了这个问题。 然而,我们现在遇到了一个新问题,即我们运行的查询并不总是重用现有连接,并最终填满所有连接槽 因此,我们运行的设置是: 在开发环境中,我们有多个DB服务器4,每个客户端站点都有复制的表和单个数据库分布在服务器上,每个站点都有自己的性能模式 我们有一个自定义查询解析函数

我为一家公司工作,该公司最近将一个站点的PHP代码从vanilla MySQL更新为MySQLi,以提前进行弃用更改

MySQL在网络级别使用64k的源TCP端口时出现了一些问题,并且出现了问题。我们通过启用持久连接修复了这个问题。 然而,我们现在遇到了一个新问题,即我们运行的查询并不总是重用现有连接,并最终填满所有连接槽

因此,我们运行的设置是:

在开发环境中,我们有多个DB服务器4,每个客户端站点都有复制的表和单个数据库分布在服务器上,每个站点都有自己的性能模式

我们有一个自定义查询解析函数,用于确定要连接到哪个主机,选择正确的模式并对其运行查询。这不是问题,这一切都很好

主数据库服务器受到连接的重创,充满连接,然后拒绝任何新连接

每次页面加载所需的每个主机仅调用一次mysqli_connect。但由于某些原因,这些连接似乎从未被重用。即使多次刷新同一页面,也会为每次加载创建新的连接


这正常吗?我原以为重新加载相同的页面并获取相同的数据会重用刷新之前创建的休眠连接。

是的,这是正常的。你应该看报纸。第一段通常足以把你吓跑。在其他语言中,持久连接的工作方式与您预期的一样

在db服务器上查看mysql进程时,是否会看到大量空闲连接?您可能希望降低mysql值以删除空闲连接。我通常会在30秒的时间内非常积极地进行设置,并将系统扩展到每天100万次的页面浏览量


要真的在屈辱变化之前,你应该考虑去PDO。无耻的插头:我写的,管理连接,按需连接或重新连接需要。这允许非常低的超时设置,而不必担心断开的连接。

系统数据加载的其他部分使用PDO,但我们没有时间来重建产品的整个数据层,这是一个具有许多maanny查询的非常庞大的产品。MySQLi是领先于弃用的捷径理想情况下,我们不希望使用持久性,但也不希望填充所有源TCP端口。我不知道是否有中间地带。我和另一个项目处于类似的状态。减少MySQL上的等待超时对我来说很有效。持续的连接实际上会让事情变得更糟,它们确实让事情变得更糟。然而,另一种选择是在每次页面加载时打开大约5000个TCP源端口。例如,如果我们对具有150个源数据库的对等方运行查询。它打开了超过65k的连接,然后其他任何东西都做不到。我不明白。您应该为每个数据库服务器建立1个连接,而不是数据库,每个页面加载。在一个每天有400K页面浏览量的站点上,我的主数据库服务器和从数据库服务器的连接数都在100左右。您在prod中有多少个db服务器?在生产中,我们有一个主服务器,上面还有站点数据库,还有4个从服务器。问题是我们要处理涉及同行的客户的数据/统计数据。任何特定的页面加载(取决于它们的查看位置)都可能通过CURL在所有服务器上引发150个查询,然后整理和显示数据。这很复杂。