問題描述

我有一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。