慢查询WordPress网站(每月50万访客和15万帖子)

时间:2019-05-02 18:14:52

标签: php wordpress nginx redis mariadb

我正在运行一个WordPress网站,每月有50万访问者,并且有15万条帖子,平均每秒100次浏览量。我试图弄清楚服务器上的负载是否正常,或者我可以采取一些措施来解决性能问题,而又不增加服务器设置和每月费用。

这是我现在正在运行的服务器设置:

  • 2个前端服务器,Nginx:2个CPU和4GB RAM
  • 1个DB服务器,MariaDB:8个CPU和16GB RAM
  • 1个Redis服务器:2个CPU和4GB RAM

如果我已经优化查询并最大程度地减少了插件的使用(总共5个插件),那么WordPress主题便是从零开始开发的。

我运行带有反向代理缓存的Nginx,在其中我将所有页面缓存5分钟,以便能够处理流量高峰(发送新闻通讯时,在30分钟内每天有3k访客出现两个每日高峰)。

MariaDB和Redis服务器正在使用开箱即用的配置运行Debian。我唯一更改的是MariaDB中的innodb_buffer_pool_size = 11G和max_connections = 300。

当有100个实时访问者时,DB CPU的运行率为50%,而有300-700个实时访问者时则为85-90%。

问题在于,即使CPU负载为50%,查询也需要花费一些时间(3-6秒)来加载。

我的登台环境在完全相同的服务器上运行,但具有另一个数据库表(帖子数量相同),查询时间为0,5-1,5秒。

所以唯一的区别是生产数据库具有更多的并发用户。

是什么原因使查询需要这种时间来加载?

2 个答案:

答案 0 :(得分:0)

听起来像您需要节点平衡器或更强大的服务器。

您有500,000位访问者,每秒访问100次页面,Wordpress非常笨拙,并且以序列化数据库中的对象而闻名(每个显示的组件都是查询)。假设您有一个简单的网站(15个查询)和5个插件(10个查询),现在将25乘以100浏览量,而在16 GB的RAM上每秒有2500个查询。这意味着每个查询将获得约0.0064 GB的内存或6.4 MB。

除非您的数据库中的表足够小以适合4.25软盘,否则我建议您使用更多功能。

答案 1 :(得分:0)

由于架构效率低,使用wp_postmeta的查询速度很慢。您可以解决该问题。

请参见http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

这将比“在问题上投入硬件”有更多帮助。