我有一个使用MySQL数据库在Node.js和Express上运行的应用程序。我正在使用的驱动程序是node-orm2。我们的用户不断报告“连接太多”错误,我已经诊断出问题,但我不知道如何解决它。
基本上发生的事情是,每次新用户访问该站点时,驱动程序都会为他们创建一个新线程/进程。我可以SHOW PROCESSLIST
在 db 上进行查询,它会Time
以0
.
如果用户进行另一个需要数据库的操作,则重新使用同一线程,Time
然后返回0
. 但是,如果他们不这样做,线程将保持活动状态(带有Command
of Sleep
),并且Time
机架会上升。数据库的最大连接限制为250
,超时为7200
。
所以基本上,如果超过 250 人在 2 小时内使用该网站,我们会看到“连接太多”错误。
我尝试使用连接池,但这使问题变得更糟。每次新用户使用数据库时,都会创建 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);