Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL“连接太多”错误受混合实例数的影响?_Mysql_Ruby On Rails_Mongrel Cluster - Fatal编程技术网

mySQL“连接太多”错误受混合实例数的影响?

mySQL“连接太多”错误受混合实例数的影响?,mysql,ruby-on-rails,mongrel-cluster,Mysql,Ruby On Rails,Mongrel Cluster,最近我开始在流量大的时候发现mySQL有太多的连接错误。我的rails应用程序在一个混合集群上运行,共享主机上有2个实例。最近的一些变化可能是驱动它的原因: 我的网站的流量增加了。我 我现在平均每天大约有4K页 白天 数据库大小增加了。我最大的桌子大约有10万行。 一些协会可能会回来 世界上有几百个例子 最糟糕的情况是,尽管大多数情况远没有如此。 我添加了一些功能 增加了 在某些操作中调用数据库。 我做了一次代码审查,以减少数据库调用、优化SQL查询、添加缺少的索引,并使用:include进行即

最近我开始在流量大的时候发现mySQL有太多的连接错误。我的rails应用程序在一个混合集群上运行,共享主机上有2个实例。最近的一些变化可能是驱动它的原因:

我的网站的流量增加了。我 我现在平均每天大约有4K页 白天 数据库大小增加了。我最大的桌子大约有10万行。 一些协会可能会回来 世界上有几百个例子 最糟糕的情况是,尽管大多数情况远没有如此。 我添加了一些功能 增加了 在某些操作中调用数据库。 我做了一次代码审查,以减少数据库调用、优化SQL查询、添加缺少的索引,并使用:include进行即时加载。然而,我的许多方法仍然进行5-10次单独的SQL调用。我的大多数操作的响应时间约为100ms,但我最常见的操作之一平均为300-400ms,有些操作的峰值随机超过1000ms

日志没有什么帮助,因为错误似乎是随机发生的,或者至少模式似乎与调用的操作或访问的数据无关

我可以通过添加额外的mongrel实例来减轻错误吗?还是mySQL连接受到服务器的限制,因此与我划分流量的进程数无关


这很可能是我的编码有问题,还是我应该按我的主机要求在共享服务器上增加容量/减少负载?

是否缓存任何内容?它是减轻应用程序和数据库负载的重要部分。您是否正在缓存任何内容?它是减轻应用程序和数据库负载的重要部分。有点不对劲。一个Mongrel实例一次处理1个请求,因此如果您有2个Mongrel实例,那么您至少不会看到来自Mongrel的超过2个活动MySQL连接

随着时间的推移,您可以记录或绘制显示状态的输出,如“Threads\u connected”


附:这不是很多杂种狗。如果您希望能够同时为2个以上的请求提供服务,那么您将需要更多。。。如果内存不足,您可以切换到Phusion Passenger和REE。

出现问题。一个Mongrel实例一次处理1个请求,因此如果您有2个Mongrel实例,那么您至少不会看到来自Mongrel的超过2个活动MySQL连接

随着时间的推移,您可以记录或绘制显示状态的输出,如“Threads\u connected”


附:这不是很多杂种狗。如果您希望能够同时为2个以上的请求提供服务,那么您将需要更多。。。如果内存紧张,您可以切换到Phusion Passenger和REE。

自Rails 2.2以来,ActiveRecord已经汇集了数据库连接,这很可能是导致您的连接过多的原因。尝试关闭database.yml中pool的值,对于该环境,默认值为5


可以找到文档。

自Rails 2.2以来,ActiveRecord已经汇集了数据库连接,这很可能就是导致您在这里连接过多的原因。尝试关闭database.yml中pool的值,对于该环境,默认值为5


可以找到文档。

我现在不缓存,但我已经仔细考虑过了。不幸的是,每个用户和日期的大部分内容都会发生变化。我可以缓存一些常见的片段,但性能的提高最多只能是增量的。不过,我确实打算这么做。每一点都有帮助。缓存特定于用户并经常向他们显示的数据,并使用清理器使其过期,这样一切都仍然是最新的,这没有什么错。只要确保根据用户id为这些缓存设置密钥,这样用户就不会看到其他人的数据。我会在有用的地方这样做。问题是,相对较小的部分数据经常显示给用户。大多数数据在用户每次访问时都会更改。因此,回报将是最小的。对一些常见的可重用项(如下拉列表)进行选择性片段缓存,以及优化一些更昂贵的SQL查询,似乎已经缓解了这个问题。我现在不缓存,但我一直在努力这样做。不幸的是,每个用户和日期的大部分内容都会发生变化。我可以缓存一些常见的片段,但性能的提高最多只能是增量的。不过,我确实打算这么做。每一点都有帮助。缓存特定于用户并经常向他们显示的数据,并使用清理器使其过期,这样一切都仍然是最新的,这没有什么错。只要确保根据用户id为这些缓存设置密钥,这样用户就不会看到其他人的数据。我会在有用的地方这样做。问题是,相对较小的部分数据经常显示给用户。大多数数据在用户每次访问时都会更改。因此,回报将是最小的。一些常见的可重用ite的选择性片段缓存
ms(如下拉列表)以及优化我的一些更昂贵的SQL查询,似乎已经缓解了这个问题。如果我只能为每个Mongrel实例使用1个连接,那么逻辑上的结论是宿主提供商有太多的应用程序共享一个数据库服务器吗?很可能-除非您对ActiveRecord连接做了一些不寻常的事情。您可以通过登录数据库并运行ShowProcessList进行检查-即使您的权限受到限制,您也应该能够看到连接的列表。PS-我很确定连接池不会起作用,因为您使用的是Mongrel,而不是在多线程环境中运行。我正在打开主机的支持票证,看看它是否在其端。我的主机提供商说,可能您的站点对于共享服务器来说太受欢迎了。您想购买VPS计划吗。lol mySQL连接限制大约为150。如果我只能为每个Mongrel实例使用1个连接,那么逻辑上的结论是宿主提供商有太多的应用程序共享一个数据库服务器吗?很可能-除非您对ActiveRecord连接做了一些不寻常的事情。您可以通过登录数据库并运行ShowProcessList进行检查-即使您的权限受到限制,您也应该能够看到连接的列表。PS-我很确定连接池不会起作用,因为您使用的是Mongrel,而不是在多线程环境中运行。我正在打开主机的支持票证,看看它是否在其端。我的主机提供商说,可能您的站点对于共享服务器来说太受欢迎了。您想购买VPS计划吗。这超出了我的理解水平。减少池不是会使瓶颈变得更糟吗?减少池会消除与MySQL服务器建立太多连接的问题;您可以查看SHOW PROCESSLISTSHOW PROCESSLIST显示的2个ID(都是空闲的)加上PROCESSLIST查询所使用的数量。因为我运行了两个mongrel实例,这是有道理的。这超出了我的理解水平。减少池不是会使瓶颈变得更糟吗?减少池会消除与MySQL服务器建立太多连接的问题;您可以查看SHOW PROCESSLISTSHOW PROCESSLIST显示的2个ID(都是空闲的)加上PROCESSLIST查询所使用的数量。因为我正在运行2个mongrel实例,所以这是有意义的。