问题描述
我有一个 WordPress 网站有超过 10k 的帖子,事情开始变得非常慢,每当我添加和编辑帖子。页面为用户加载速度很快,以及管理员列表,但是当写入或更新发生时,服务器进入 100%的 CPU 并需要很长时间 (有时比 PHP 的超时时间长 60 秒) 。
我认为这可能与 MyISAM 的表级锁定有关,我正在考虑将其切换到 InnoDB 。这样做有什么影响?
一些统计:
select - per hour ~22k
update - per hour ~7.6k
set option - per hour ~7k
我知道我可以做很多其他优化,但我的感觉是这可能会产生最大的影响。
谢谢
编辑:我发现导致缓慢的主要问题之一是每次重新生成”relatedness” 的 YARPP(还有一个相关的帖子插件),这似乎是由于我们拥有的 2k +标签。我关闭了”consider tags” 选项,并大大增加了。
此外,重新生成东西的其他插件可能会导致这些问题,例如一些 XML sitemap 插件。
所以,我的直接问题解决了,虽然我仍然希望听到一个很好的答案,InnoDB 和 MyISAM 的 Wordpress!
最佳解决方案
我确实会切换到 InnoDB 。许多人早已讨论过表锁/行锁。我总是选择 InnoDB 双手。但是,there is another profound reason for choosing InnoDB…CACHING 。
虽然大多数人吹嘘 MyISAM 的读取速度更快,但大多数人忘记了 MyISAM 的多个缓存 (称为密钥缓存 (由 key_buffer_size 设置)) 只缓存来自.MYI 文件的索引页。它不会缓存数据页。它在 32 位系统中的最大功能为 4GB 。 8GB 是 64 位的最佳最大值。
InnoDB 缓冲池缓存数据和索引页。根据您所拥有的服务器,可以将其高速缓存到 RAM 中的整个数据集。您可以调整 InnoDB 高达 80%的 RAM 和 10%的 DB Conenctions,并为操作系统留下 10%。 This is true even for different operating systems 。
I have recommended these things for Drupal customers 取得了巨大的成功。 It applies to WordPress 也一样。我为 WordPress 客户端提供了 DB 支持。同样的改善。
您可以更有效地使用 configure memory for InnoDB,您可以更多的 MyISAM 。总是有一种方法来实现 tweek InnoDB to suit your performance needs 。随着您的数据增长,最终将成为 become a requirement 。
次佳解决方案
InnoDB 可能不会帮助你 – 页面/行级锁定有助于减轻争用,但它不觉得这是你的问题。
有很多东西在那里,建议 MyISAM 在平均博客场景中比 InnoDB 慢 (读写多于写入) 。
在进行切换之前,您至少应该执行以下操作
-
运行 mysqltuner 这将给你一些配置建议 (这不是绝对或所有知道的)
-
打开缓慢的查询日志记录,将其保留一天左右,然后开始筛选日志,并解释查询以查看发生的情况
从个人经验来看,我发现在 wp_comments 上添加一个无索引字段的索引大大地帮助了我特定的情况 (突发评论的时期,10 个左右的人可能会尝试在同一时间发表评论),并且可能发现什么查询运行缓慢,为什么会引导您更好地了解问题,并提供一个真正的解决方案!
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。