wordpress 数据库优化,解决主机CPU占用达到100%的烦恼

最近我的服务器CPU经常占用到100%,如图:

遇到这种情况,网站打不开不说,还搞的MySQL数据库崩溃好几次,幸亏之前有一篇教程《一次InnoDB引擎MySQL数据库的恢复过程》,数据还没有弄丢。服务器配置也不低了,出现这种情况,排查下来应该是MySQL数据库没优化好。网上参考了不少资料,按照如下方法予以解决:

首先,Shell登入数据库:

mysql -uroot -p

输入密码,进入mysql>

在网站最卡的时候,输入

show processlist;

查看进程,发现SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes' 一直提示Writing to net,一直卡在这里,这是不能忍受的。

很清晰的看到这条SQL查询没有使用到索引,进入到wp_options表结构查看索引情况,果然没有把autoload列加入到索引中,所以解决方法很简单,只要把autoload列添加索引就能解决了,语句如下:

ALTER TABLE wp_options ADD INDEX autoload USING BTREE (autoload);

PS:MySQL 索引相关命令:


ALTER TABLE wp_options ADD INDEX autoload USING BTREE (autoload); #增加索引

ALTER TABLE wp_options DROP INDEX autoload; #删除索引

SHOW INDEX FROM wp_options; #列出索引

我们再来看下这条SQL语句的执行计划:

EXPLAIN SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';

至此,性能优化完成,虽然还不知道WordPress在什么情况下会执行此条语句,但可以确定的是在其最新版本上也是没有添加该索引的。

后续优化:

我们还需要到 /etc 目录下,找到my.conf 文件,将 max_allowed_packet = 1M 更改为 max_allowed_packet = 20M,然后重启服务器即可。

再看看服务器负载,整个世界清静了:)

发表评论

电子邮件地址不会被公开。 必填项已用*标注