問題描述

希望對 WordPress 資料庫中最佳化和保持最佳效能的一些反饋,以繪製圖片…. 讓我們說你有一個 WordPress /Buddypress MU 網站,開始在大約 150kb(香草安裝) … 隨著時間的推移,使用者新增部落格,論壇,帖子和評論,資料庫增長到 5mb …. 然後是明年的 10mb …. 還假設主機控制元件是標準的共同設定,如 Cpanel 或 Plesk 。

  • 資料庫中的條目數量會影響 front-end 網站的效能?

  • 作為網站管理員,您可以做些什麼,以便隨著資料庫的增長而保持執行順暢?

  • 你的資料庫在 500 – 600mb 大之後,在第 5 年後的表現可以期待什麼?

感謝您對保持緊密船舶的任何反饋。

問候,

S.

最佳解決方案

您的具體問題:

1) 在效能受影響之前,DB 可能包含的 「條目數」 沒有嚴格的限制。效能取決於您的硬體和配置,就像在 DB 的大小和結構上一樣。

2) 如果您擔心資料庫層的可擴充套件性,可以在叢集中或在允許調整大小的雲端框或 VPS 上執行它。如果您的資料庫開始緩慢,您可以調整大小 (通常是額外的費用) 。這些選項增加了成本,但確實是確保 DB 的可擴充套件性的最佳方式。

3) 這取決於你的主機設定和你的資料庫架構。但一般來說 (除非你是一個非常便宜的盒子),我不用擔心一個 30MB 的 WordPress 資料庫。 WordPress 做好索引表的工作,甚至一個 OOB MySQL 配置也可以輕鬆處理這個大小的 DB 上的 WordPress 查詢。當您達到千兆位元組時 – 那就是您可能需要認真考慮效能最佳化選項。

一般來說:

如果您擔心效能問題,請專注於調整現有的 MySQL 設定和/或設定快取層。快取可以大大減輕 MySQL 的負擔 (特別是對於 WordPress 站點,因為它們通常執行大量的資料庫查詢) 。

如果您已經正確調整 MySQL 並設定了一個體面的快取層,那麼您仍然擔心會出現硬體配置問題,您可以在 x 時間之後設定刪除內容的策略。

這些東西都不是特定於 WordPress 的。而且我不確定該問題有什麼答案不適用於在 LAMP 堆疊上執行的任何網站或應用程式。但也許有人有關於 MU 表結構或其他 WP-specific DB 技巧的建議… 我不知道。

次佳解決方案

嚴格來說,從 MySQL Point-of-View,我有建議如何改進 MySQL 例項資料/索引的快取。

請記住,MySQL 有兩個主要的儲存引擎

  • MyISAM 資料

  • InnoDB 的

他們的快取機制是不同的。有一些你可以做的,以調整您選擇的儲存引擎。

MyISAM

MyISAM 只快取索引頁。它從不快取資料。您可以做兩件事來改善 MyISAM 表的 I /O 。

MyISAM 改進#1

具有 VARCHAR 列的任何 MyISAM 表都可以內部轉換為 CHAR 而不用觸控初始設計。假設你有一個名為 mydb.mytable 的表,並且您希望改進它的 I /O,請執行以下操作:

ALTER TABLE mydb.mytable ROW_FORMAT=Fixed;

這將增加表 60%-100%的大小,但是在不改變任何東西的情況下,I /O 的效能將會提高 20-30%。我之前在 DBA StackExchange 中寫過這個:

MyISAM 改進#2

您需要增加 MyISAM 金鑰快取 (按照 key_buffer_size 的大小) 。請執行此查詢:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql','performance_schema')) AA ) A,
(SELECT 2 PowerOf1024) B;

這將顯示您基於您當前資料集的理想 key_buffer_size 。

InnoDB

InnoDB 快取資料和索引。如果您將所有資料轉換為 InnoDB,並且目前正在從所有 InnoDB 資料庫執行 WordPress,則需要將 InnoDB 緩衝池 (使用 innodb_buffer_pool_size 調整大小) 。請執行此查詢:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

這將顯示您基於您當前資料集的理想 key_buffer_size 。

Projections

如果您預計資料集將增長 20 倍,則只有多個此查詢建議的建議 20 。假設您的 MyISAM 資料集是 15MB,3MB 是索引的總和。如果您估計有 20 倍的資料,請將 key_buffer_size 設定為 60MB,如/etc/my.cnf 所示:

[mysqld]
key_buffer_size=60M

然後重新啟動 MySQL 。同樣的事情將適用於 InnoDB 緩衝池。

如果您的所有資料都是 InnoDB,則需要對 StackOverflow 中釋出的 InnoDB 基礎架構執行完整的清理。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。