繁体   English   中英

节点和MySQL-解决“连接过多”问题

[英]Node and MySQL - Solving a “Too Many Connections” issue

我有一个使用MySQL数据库在Node.jsExpress上运行的应用程序。 我使用的驱动程序是node-orm2 我们的用户不断报告“ Too Many Connections ”错误,并且我已经诊断出问题,但是我不知道如何解决。

基本上发生的是,每次有新用户访问该站点时,驱动程序都会为他们创建一个新的线程/进程 我可以在db上执行SHOW PROCESSLIST查询,它将显示在Time0

如果用户执行了另一个需要数据库的操作,则该线程将被重用 ,并且Time将回到0 但是,如果不这样做, 线程将保持活动状态 (使用“ Sleep Command ”),并且Time延长。 该数据库的最大连接限制为250 ,超时值为7200

因此,基本上,如果在2个小时内有250多人使用该网站,我们将看到“连接过多”错误。

我尝试使用连接池 ,但这使问题变得更糟。 每次新用户使用数据库时,它都会创建10个线程,并且在达到7200秒超时时, 将重新产生该线程

我在这里有什么选择?

我当前的方法是每半小时运行一次计划的作业,以关闭已打开太长时间的线程,但是还有更好的方法吗?

我正在使用以下设置:

db.settings.set("properties.association_key", "{name}Id");
db.settings.set("instance.autoFetch", true);
db.settings.set("instance.returnAllErrors", true);
db.settings.set("instance.cache", false);

连接池可能值得重温。 连接池的一个卖点是,您可以将它们配置为在一定时间后回收闲置或阻塞的连接。 因此,即使您的应用程序泄漏了连接,数据库也会受到保护。

我知道这不能解决线程的根本问题,但是在任何情况下都应该收回连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM