WordPress网站在大数据量下的性能问题
WordPress在全国以及全球的安装量非常大,但是很多人忽略了一点事实,Wordpress本身是一个Blog程序,而Blog网站的文章数据量通常并不会大多(几年下来可能也只有几十到几百篇),所以它的一些设计,在大数据量下可能会出现一些问题。
当Wordpress流行起来之后,拥有了大量的资源,比如主题、插件等,很多人也会把它当作CMS程序来用,但是当文章增加到一定数量时,性能问题也就凸显出来了。
不同的网站可能会涉及到不同的问题,具体的情况需要具体分析,这次案例只给大家提供下参考。
客户遇到的主要问题是这个:
简单看下就知道是SQL效率的问题,但是具体是哪个SQL,需要检查过才能确定。
服务器开启慢查询日志记录后,可以看到下面这条语句:
根据日志来看,开启日志后,这条语句一共执行过80次,平均每次的时间超过20秒(日志阀值设置为2S)。
根据语句内容来看,实现的功能是显示下面这个相关文章的数据:
这种复杂的查询语句几乎没有优化的余地,所以建议是,删除掉主题中对应的代码,使用wumii或者百度的相关文章推荐功能来做为替换。
很多大型的Wordpress网站都会使用这种外部调用实现相关文章功能。一个比较有名的Wordpress大站”萝卜网”,同样使用的是wumii实现的相关文章推荐功能(现已被政府部门要求关闭)。
这样做的好处,1是不需要耗费服务器资源,2是能做到真正的相关文章(程序自身显示的相关文章很多时候其实根本没有相关性)。
将网站主题更换到默认主题后,由于没有相关文章查询,所以网站是正常的速度:
而在使用带有相关文章的主题时,页面执行速度是这样:
客户提出来的另一个问题:
这是一个常识性问题,程序自带的搜索功能使用的是like语句,当文章数量增加到1万以上时,查询的时间会明显增加。几乎所有的网站程序都差不多,而不仅是局限于Wordpress。
推荐的解决方案是使用百度的站内搜索,好处和前面差不多,搜索效果会更好,但是不消耗主机资源。
最后一个问题:
这个问题的原因还是最前面提到的,Wordpress作为一个Blog程序,很多地方并没有考虑到大数据量的情况,比如很多必要的索引都没有建立。
在编辑文章时,检查调用的查询:
类似的查询还有一些,不一一列举,针对查询的字段设置索引后,编辑功能可以正常使用。
除了上面提到的这些(复杂的联合查询,like方式搜索),还有一些比较常见的影响性能的语句需要避免使用,比如很多CMS模板中的随机调用都是使用的ORDER BY RAND()方式实现,当文章数量达到几万时,一次查询执行时间可能会达到几秒甚至更多。