我的Wordpress网站收到了“建立数据库连接错误”按钮。
我的主人告诉我这是因为我的“用户”有太多的数据库连接一次打开。这导致错误进行额外的连接,从而进行按摩。
通过杀死死锁数据库连接已得到纠正。有许多连接将数据复制到临时表,但死锁是由一大堆等待一次更新的查找引起的。
有人可以向我解释这可能是怎么发生的,以及如何避免它?
(p.s:WP安装有2000多个帖子)
答案 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()?对于前者,连接将保持打开更长时间,你不能强迫它关闭。