一部のドキュメントで、myisamテーブルにkey_buffer_sizeを割り当てることができることがわかりました。これには、次の手順も含まれます。
SET GLOBAL myisam_table.key_buffer_size = 4194304;
CACHE INDEX test.myisam_table IN myisam_table;
LOAD INDEX INTO CACHE test.myisam_table;
このコマンドは正常に機能しました。
しかし、グローバルテーブルではなくkey_buffer_size
を取っているMyISAMテーブルをどのようにして確認できますか?
同様の何かをサポートする他のMySQLエンジンはありますか?
あなたの質問では、専用のキーキャッシュをセットアップするために正しい構文を指定しました(- LOAD INDEX INTO CACHE )
私は前にこれについて書いた
1つ以上のテーブルを専用のキーキャッシュに割り当て、LOAD INDEX INTO CACHE
を実行したら、次のようにします。
キャッシュされているものが過度に大きくないことを確認したい場合は、次のようにします。
STEP01)このクエリを実行する
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')) AA ) A,
(SELECT 2 PowerOf1024) B;
これは、すべてのMyISAMインデックスページを保持するために、デフォルトのキーキャッシュの大きさ(MB)をカウントします。
STEP02)推奨番号を割り当てる
STEP01からのクエリが5Gであるとします。
最初のケースでは
[mysqld]
key_buffer_size=2G
2番目のケースでは
[mysqld]
key_buffer_size=5G
STEP03)service mysql restart
STEP04)本番システムを1週間実行します
STEP05)このクエリを実行する
SHOW GLOBAL STATUS LIKE 'Key_blocks_used';
SHOW GLOBAL STATUS LIKE 'key_cache_block_size';
これらの2つの数値が何を返すかに関係なく、一緒に乗算して1048576で除算します。これにより、MyISAMキーキャッシュで使用されている領域のMB数がわかります。その数に1.05を掛けて、最も近い整数に丸めます。その数が何であれ、それはkey_buffer_sizeの最終値として使用する数です。
MyISAMデータのインデックスのワーキングセットが最も安全な値であることを確認するには、これらの5つの手順を6か月以内に再度実行する必要があります。また、DBサーバーのRAMを拡張する必要があるかどうかもわかります。
特定のテーブルにこの値を与えることはできません。この値は、MyISAMテーブルのインデックスブロックがバッファリングされ、すべてのスレッドで共有されることを示します。 key_buffer_size
は、インデックスブロックに使用されるバッファのサイズです。キーバッファーは、キーキャッシュとも呼ばれます。
http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size
InnoDBエンジンタイプは innodb_buffer_pool_size と呼ばれる同様のオプションをサポートします
InnoDBがデータとそのテーブルのインデックスをキャッシュするために使用するメモリバッファーのバイト単位のサイズ。デフォルト値は8MBです。この値を大きく設定すると、テーブル内のデータにアクセスするために必要なディスクI/Oが少なくなります。専用データベースサーバーでは、これをマシンの物理メモリサイズの最大80%に設定できます。ただし、物理メモリの競合によりオペレーティングシステムでページングが発生する可能性があるため、あまり大きく設定しないでください。