Javascript 节点和MySQL—解决一个“问题”;“连接太多”;问题
我有一个应用程序运行在Node.js和Express上,使用的是MySQL数据库。我使用的驱动程序是。我们的用户不断报告一个“连接太多”错误,我已经诊断出了这个问题,但我不知道如何修复它 基本上,每次新用户访问站点时,驱动程序都会为他们创建一个新的线程/进程。我可以在数据库上执行Javascript 节点和MySQL—解决一个“问题”;“连接太多”;问题,javascript,mysql,node.js,express,node-orm2,Javascript,Mysql,Node.js,Express,Node Orm2,我有一个应用程序运行在Node.js和Express上,使用的是MySQL数据库。我使用的驱动程序是。我们的用户不断报告一个“连接太多”错误,我已经诊断出了这个问题,但我不知道如何修复它 基本上,每次新用户访问站点时,驱动程序都会为他们创建一个新的线程/进程。我可以在数据库上执行showprocesslist查询,它将在那里显示时间为0 如果用户执行另一个需要数据库的操作,则重复使用该同一线程,时间返回到0。但是,如果没有,则线程将保持活动状态(使用Sleep的命令),并且时间将停止。db的最大
showprocesslist
查询,它将在那里显示时间为0
如果用户执行另一个需要数据库的操作,则重复使用该同一线程,时间
返回到0
。但是,如果没有,则线程将保持活动状态(使用Sleep
的命令),并且时间将停止。db的最大连接限制为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);
连接池可能值得重新访问。连接池的一个卖点是,您可以将它们配置为在一定时间后回收空闲或卡住的连接。因此,即使应用程序泄漏连接,数据库也会受到保护
我知道这并不能解决线程的根本问题,但在任何情况下回收连接都可能是明智的