什么可能导致“太多的数据库连接”

时间:2010-10-09 22:59:20

标签: php mysql wordpress

我的Wordpress网站收到了“建立数据库连接错误”按钮。

我的主人告诉我这是因为我的“用户”有太多的数据库连接一次打开。这导致错误进行额外的连接,从而进行按摩。

通过杀死死锁数据库连接已得到纠正。有许多连接将数据复制到临时表,但死锁是由一大堆等待一次更新的查找引起的。

有人可以向我解释这可能是怎么发生的,以及如何避免它?

(p.s:WP安装有2000多个帖子)

5 个答案:

答案 0 :(得分:8)

我见过的一件事对WP和数据库速度有很大帮助,就是清理你的帖子和页面修订数据库。 WP保留每个编辑修订版的完整副本,并且对于2000个帖子,您的数据库可能是巨大的。在phpmyadmin中将其作为SQL查询运行以清除修订。我看到数据库大小下降了75%,并在清除修订后运行得更快。如果在安装WP时更改了表前缀,请更改表前缀,并事先运行备份。

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'

然后优化表运行该查询以完成清除修订后,可以从phpmyadmin的下拉菜单中优化整个数据库,也可以通过另一个查询来查找posts表:

OPTIMIZE TABLE wp_posts;

然后,您可以通过将此行添加到wp-config.php来停止修订来阻止帖子/页面修订再次累积:

define ('WP_POST_REVISIONS', FALSE);

或者这一行选择要保留的修订数量:

define('WP_POST_REVISIONS', 3);

如果您可以访问MySQL配置文件,请使用GitHub - major/MySQLTuner-perl之类的实用程序调查MySQL以获得更好的性能。

答案 1 :(得分:5)

在共享托管环境中,这种行为迟早会在您的博客开始看到更多流量时发生 - 您提到的细节听起来可能与编写得不好的WordPress插件有关(为了提高性能,请确保更新所有插件以及WordPress核心)。

如果您还没有考虑,可能还需要考虑WP Super Cache

答案 2 :(得分:2)

您可能需要查看两个选项,

持久连接尝试反复使用与MySQL服务器相同的连接(如果可用)(PHP请求之间的连接没有关闭)。

MySQL max_connections允许增加服务器接受的可能连接数量。

答案 3 :(得分:1)

我不熟悉wordpress,所以这是我从DB perf调整的角度来看:

首先,我会深入了解为什么更新需要这么长时间。也许有一个糟糕的查询计划需要调整数据库的索引策略。

如果无法加速更新,并且您愿意查找可能会读取未完全提交的数据(例如,博客可能没有,但不是会计应用程序),那么您可以更改SELECT包含NOLOCK提示以避免阻止更新。

有关详细信息,请参阅this SO question

答案 4 :(得分:1)

当您使用过多的数据库连接时(显然),可能会发生太多的数据库连接,这是一次在您的站点上运行查询的人数超过允许的最大连接数。你的mysql服务器允许多少个连接?

您使用的是mysql_pconnect()还是mysql_connect()?对于前者,连接将保持打开更长时间,你不能强迫它关闭。