gpt4 book ai didi

php - MySQLi 持久连接填充并发用户

转载 作者:行者123 更新时间:2023-11-29 23:47:07 24 4
gpt4 key购买 nike

我所在的公司最近将网站的 PHP 代码从 vanilla MySQL 更新为 MySQLi,以领先于弃用更改。

我们在使用 MySQL 在网络级别使用 64k 源 TCP 端口时遇到了一些问题并崩溃了。我们通过启用持久连接来解决这个问题。但是,我们现在遇到了一个新问题,即我们运行的查询并不总是重用现有连接,最终会填满所有连接槽 (200)。

我们运行的设置是这样的:

我们有多个数据库服务器(开发环境中有 4 个),每个客户端站点都具有复制表和单个数据库,分布在服务器上(每个站点都有自己的架构)以提高性能。

我们有一个自定义查询解析函数,可以确定要连接到哪个主机,选择正确的架构并运行查询。这不是问题,一切正常。

主数据库服务器受到连接的打击,填满然后拒绝任何新连接。

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

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

最佳答案

是的,这很正常。您应该阅读warnings on persistent connections 。第一段通常足以吓跑你。在其他语言中,持久连接可以如您所期望的那样工作。

当你查看db服务器上的mysql进程时,你是否看到很多空闲连接?你可能想减少 mysql wait timeout值来删除空闲连接。我通常对此设置相当积极(30 秒),并且对系统进行了适当的扩展(每天 100 万页面浏览量)。

要真正领先于弃用更改,您应该考虑使用 PDO。无耻插件:我写的my own db class管理连接、按需连接或根据需要重新连接。这允许非常低的超时设置,而不必担心连接断开。

关于php - MySQLi 持久连接填充并发用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com