MySQLの視点から厳密に言えば、MySQLインスタンスのデータ/インデックスのキャッシュを改善する方法に関する提案があります。
MySQLには2つの主要なストレージエンジンがあることに注意してください。
それらのキャッシングメカニズムは異なります。選択したストレージエンジンに合わせて調整できることがいくつかあります。
MyISAM
MyISAMはインデックスページのみをキャッシュします。データをキャッシュすることはありません。MyISAMテーブルのI / Oを改善するには、2つのことを行うことができます。
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が表示されます。
予測
データセットが20倍に成長すると予測した場合、このクエリが推奨する数の20倍になります。MyISAMデータセットが15MBで、3MBがインデックスの合計であるとします。20倍のデータがあると推定する場合は、/ etc / my.cnfで次のようにkey_buffer_sizeを60MBに設定します。
[mysqld]
key_buffer_size=60M
次にMySQLを再起動します。同じことがInnoDBバッファープールにも当てはまります。
すべてのデータがInnoDBの場合、私がStackOverflowに投稿したInnoDBインフラストラクチャの完全なクリーンアップを実行する必要があります。