我正在维护一个基于Drupal构建的继承网站。我们目前正在经历与数据库的“太多连接”。
在/includes/database.mysql.inc文件中,@mysql_connect($url['host'], $url['user'], $url['pass'], TRUE, 2)
(mysql_connect() documentation)用于连接数据库。
应该使用$new_link = TRUE
吗?我的理解是它将“永远打开一个新的环节”。这会导致“太多关联”吗?
答案 0 :(得分:2)
编辑核心是不是没有。你会忘记你做的,升级版本,而bam,改变都消失了。
答案 1 :(得分:1)
MySQL,就像任何RDBMS一样,会限制它随时接受的连接数量。 my.cnf配置文件在max_connections配置下为服务器指定此值。您可以更改此配置,但根据服务器的容量存在实际限制。
持久连接可能有助于减少连接数据库所需的时间,但它对MySQL将接受的连接总量没有影响。
连接MySQL并使用'SHOW PROCESSLIST'。它将显示当前打开的连接以及它们的作用。您可能有多个连接闲置或运行时间过长的查询。对于空闲连接,可能只是确保您的代码在不需要时不保持连接打开。对于第二个,它们可能是您的代码的一部分,需要进行优化,以便查询不会花费太长时间。
如果所有连接都是合法的,那么您只需要比当前配置允许的负载更多。如果即使使用当前连接数,MySQL负载也很低,您可以稍微增加它,看看它是如何发展的。
如果您不在专用服务器上,则可能无法对此做很多事情。它可能只是别人的代码造成了麻烦。
有时,这些失败只是暂时的。当它失败时,您可以在几毫秒后重试连接。如果它仍然失败,则可能是一个问题,停止脚本是正确的做法。不要把它放在一个无限循环中(以前见过,可怕的想法)。
答案 2 :(得分:1)
Drupal运行几个高性能站点没有问题。例如,格莱美颁奖典礼网站今年改为Drupal,这是该网站第一次没有在cerimony下降!某些配置需要调整您的设置。可能是mysql。
编辑你的my.cfg并重新启动你的mysql服务器(Fedora,RH,centos中的/etc/my.cfg和* buntu上的/etc/mysql/my.cfg)
的[mysqld] MAX_CONNECTIONS =一些-数这里
或者,首先尝试更改而不重新启动服务器,登录到mysql并尝试:
显示像'max_connections'这样的变量#this告诉你当前的数字 设置全局max_connections = some-number-here
哦,就像另一个人说的那样:DO。不。编辑。 DRUPAL。核心。如果你想保持你的网站更新,可能会带来不稳定的头痛并带给你一个受伤的世界。答案 3 :(得分:1)
仅供参考:与Drupal使用永久连接是在寻找麻烦。据我所知,没有人使用它。
答案 4 :(得分:0)
new_link
参数仅在您有mysql_connect()
,在1个请求期间多次调用时才有效,这可能不是这种情况。
我怀疑这是因为有太多用户同时访问您的网站,因为对于每个访问者,都会建立与该数据库的新连接。
如果您确认是这种情况,mysql_pconnect()
可能有帮助,因为您的问题不是数据库服务器上的压力,而是连接数。如果您选择使用此路线,还应阅读Persistent database connections以查看它是否适用于您的网络服务器设置。