問題描述

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