该网站正在运行wordpress和woocommerce。最近我遇到了一个问题,即mysql总是卡住并且有100多个连接。进一步看,我可以看到它,因为wordpress正在发送
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
使mysql运行至少20秒并锁定表。同时,对wp_options中的特定值进行了大量选择查询,因此所有这些查询都是打开并等待的。
我认为这是因为wordpress调用get_options()的方式是从缓存中找到,然后如果缓存无法找到它,它将从数据库中读取所有内容。
但我不明白为什么wordpress会每分钟调用一次?
现在,wordpress会每隔一分钟或更短时间调用下面的查询,这只是在杀死我的网站。
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
SELECT option_value FROM wp_options WHERE option_name = 'uninstall_plugins' LIMIT 1
SELECT option_value FROM wp_options WHERE option_name = '_transient_timeout_w3tc.verify_plugins' LIMIT 1
SELECT option_value FROM wp_options WHERE option_name = '_transient_w3tc.verify_plugins' LIMIT 1
它实际上调用了近20个我没有列出所有查询的查询。
我猜每次调用get_option()都会引导一组调用来查找wp_option表中的所有内容。我可以看到有30个
的查询SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'
在我输入这个问题时打电话。
我可以从慢查询日志中看到:
Query_time: 201.573018 Lock_time: 27.904311 Rows_sent: 9456 Rows_examined: 9456
SET timestamp=1525462712;
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
有没有人知道造成这个问题的原因是什么?我尝试将索引添加到自动加载,但它仍然可以通过30次重复呼叫来终止我的网站。
我检查过的事情: 我启用了防火墙,所以它不应该是DDos攻击,但我真的在想是否存在wordpress / woocommerce错误可以通过简单的发布/获取请求导致此问题。 检查cron作业运行背景没有错。
提前谢谢大家。这个问题让我很伤心,因为我真的不知道我应该从哪里开始研究这个问题。