WordPress文章數量10萬以上時文章編輯器卡死的解決方案

這個問題來自對post_meta表的一個慢查詢:

SELECT DISTINCT meta_key 
FROM wp_postmeta 
WHERE meta_key NOT BETWEEN '_'
AND '_z' 
HAVING meta_key NOT LIKE '\\_%' 
ORDER BY meta_key 
LIMIT 30

該查詢由WordPress文章編輯器的Meta Box功能發起。

該問題的原因是MySql中普通索引的長度最長為767位元組,如果使用的是utf8mb4編碼的話,那麼總的字元長度就是767/4,約為191,而WordPress的post_meta表的meta_key列的字元長度則是255。

所以此時因為meta_key的長度超範圍,索引並未生效。解決方案可以選擇把資料庫編碼更改為utf8或是將meta_key的長度更改為191,再或者是禁用掉Meta Box功能。

當然,提醒一句,這些更改都可能會破壞相容性,所以更改前請務必做好測試工作。

最後,導致效能問題的原因千奇百怪,具體情況要具體分析再針對性解決。so,本文所述方案不一定對你有用,但可提供一個思考的方向。

Leave a Reply

Your email address will not be published. Required fields are marked *

Captcha Code