首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQLi持久连接填充并发用户

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

Stack Overflow用户
提问于 2014-09-16 05:31:12
回答 1查看 297关注 0票数 0

我在一家公司工作,该公司最近更新了一个网站的PHP代码,从普通的MySQL到MySQLi,以便赶在弃用更改之前。

我们遇到了一些MySQL在网络级别使用64k源tcp端口并发生故障的问题。我们通过启用持久连接修复了这个问题。然而,我们现在有了一个新的问题,那就是我们运行的查询并不总是重用现有的连接,最终会填满所有的连接槽(200)。

我们运行的设置如下:

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

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

主DB服务器正在遭受连接的重创,填满然后拒绝任何新的连接。

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

这是正常的吗?我原本期望重新加载相同的页面并获取相同的数据将重用刷新前创建的休眠连接。

EN

回答 1

Stack Overflow用户

发布于 2014-09-16 05:45:39

是的,这很正常。您应该阅读warnings on persistent connections。通常第一段就足以把你吓跑了。在其他语言中,持久连接的工作方式与预期不谋而合。

当您查看数据库服务器上的mysql进程时,是否看到大量空闲连接?您可能希望减小mysql wait timeout值以丢弃空闲连接。我通常在这个设置上相当激进(30秒),并且已经适当地扩展了系统(每天有100万的页面浏览量)。

要真正走在弃用更改的前面,您应该考虑使用PDO。不知羞耻的插件:我编写了管理连接、按需连接或按需重新连接的my own db class。这允许非常低的超时设置,而无需担心连接丢失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25857209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档