web-dev-qa-db-ja.com

特定のテーブルにmysql Key_buffer_size値を割り当てることはできますか?

一部のドキュメントで、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エンジンはありますか?

3
Deepak M

あなたの質問では、専用のキーキャッシュをセットアップするために正しい構文を指定しました(- LOAD INDEX INTO CACHE

私は前にこれについて書いた

1つ以上のテーブルを専用のキーキャッシュに割り当て、LOAD INDEX INTO CACHEを実行したら、次のようにします。

  • キャッシュされたインデックスは
    • デフォルトのキーキャッシュから削除されます
    • mysqldを再起動するまでデフォルトのキーキャッシュに戻らない( init reload in init file
  • わかるのは、どのテーブルがデフォルトのキーキャッシュに入れられないかだけです

キャッシュされているものが過度に大きくないことを確認したい場合は、次のようにします。

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であるとします。

  • マシンに4GBまたはRAMしかない場合は、割り当てないでください。推奨値の半分(2G)を使用します。
  • マシンに10Gがある場合は、キーキャッシュに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を拡張する必要があるかどうかもわかります。

1
RolandoMySQLDBA

特定のテーブルにこの値を与えることはできません。この値は、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%に設定できます。ただし、物理メモリの競合によりオペレーティングシステムでページングが発生する可能性があるため、あまり大きく設定しないでください。

2
Mahesh Patil