# User@Host: root[root] @ localhost []
# Query_time: 0 Lock_time: 0 Rows_sent: 394 Rows_examined: 458
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
我不明白这么小的表要花多少时间才能执行。这仅仅是其他问题的征兆吗? (当前在专用VM上运行Moodle,phpbb和WP)。
#1 楼
更新:正在记录查询的原因是它不使用索引。查询时间为0,即实际上执行得很快。如果您不想记录这些日志,则可以取消设置“ log-queries-not-using-indexes”选项。wp_options表在自动加载时没有索引(现在应该是已在2019年8月15日添加到WP核心架构中),因此查询最终会进行全表扫描。通常,该表不应太大,所以这不是问题,但是我猜这在您的情况下是有问题的。在注释中,如果autoload的值不是大多数是,还是在yes和no之间均匀分布,则可能不是:
首先,执行此查询以查看分布情况:
SELECT COUNT(*), autoload FROM wp_options GROUP BY autoload;
如果大多数将其设置为“ no”,则可以通过在自动加载时添加索引来解决该问题。 br />
但是,您可能想弄清楚该表太大的原因。可能是一些写得不好的插件造成了一些麻烦。
评论
我怀疑这种情况下的索引是否会带来任何收益-请查看有关基数的本文。
–TheDeadMedic
2012年11月6日14:50
取决于是否将大多数选项设置为自动加载。我认为不会,但是无论如何桌子上的东西都不应该变得太大,以至于出现了一些可疑之处。
–排行榜
2012年11月6日15:05
我通过回答进行了更新,以增加一些有关检查值分布的信息。
–排行榜
2012年11月6日15:14
我刚刚注意到评论,并意识到我的回答是完全错误的。该查询实际上并不慢……它只是记录在慢查询日志中,因为它不使用索引。
–排行榜
2012年11月6日17:00
由于这个问题和答案,我发现我的wp_options表中有90k条目,其中88.5k设置为autoload false。其余的都是插件添加的“临时”条目(大概是为了缓存?)。将索引添加到autoload列会将mySql负载立即从平均89%降低到2.5%。监视代理显示我的站点的响应时间已从1900ms减少到500ms。这对我来说是一个改变游戏规则的人。
–
17 Mar 25 '17 3:41
#2 楼
几天前,我偶然发现了运行在服务器上的mytop中提到的查询-实际上,每个查询花费了相当长的时间(约10秒)!因此,在现实世界中,wp_options可能会增长到有问题的大小。就我而言,我怀疑缓存插件Cachify会导致wp_options膨胀。该wp_options的数据:
,我添加了类似于Vinay Pai发布的解决方案的索引,可以完美地解决该问题。
#3 楼
我的wp_options表只有大约235行数据。我尝试为表建立索引,但无济于事。结果是,已在表中插入了大约150个临时选项,但并未自动删除。
我不知道它是否相关,但是我一直在浏览我的/var/log/apache2/access.log文件,并注意到有多个(大概是被破坏的)Amazon Web Services服务器(IP地址以54开头.XXX和32.XXX)一直试图利用/~web-root-dir/xmlrpc.php。
经过一些故障排除后,我在wp_options表中查询了包含“ transient”的选项名称。 br />
从wp_options中选择*,其中option_name如'%transient%';
从此查询返回的字段之一是'option_value',其数据类型为LONGTEXT。根据mySQL文档,一个LONGTEXT字段(每行)最多可容纳4 GB的数据。瞬变”)在option_value字段中具有大量数据。查看结果,我还看到了将命令注入wp-cron进程的企图,希望它们将在cron周期内执行。
我的解决方案是删除所有的“瞬态”行。这不会伤害服务器,因为“临时”行将自动重新填充(如果应该存在的话)。
执行此操作后,服务器再次响应。
查询以删除以下行:
从wp_options中删除,其中option_name如'%transient%';
我已将AWS IP地址/ 8超级块添加到防火墙中,也是(-:
评论
是的我也遭受了“ 40秒的加载时间”的困扰,直到发现我有20,000个wp_option记录,其中每个页面都加载了海量数据。删除那些大大加快了站点。
– JasonGenX
19年2月12日在17:34
#4 楼
wp_options表中与自动加载索引字段相关的更新:WordPress 5.3中的wp_options.autoload已添加了索引。请参阅WordPress 5.3 Changelog
即使您也可以看到wp_options表中的其他列也可以使用索引:
SHOW INDEX from wp_options
评论
我投票结束这个问题,因为这是8年前提出的。在WP的最新更新中,此问题已得到解决。