mysqlチューナーは、mySQLがインストールされたRAMの166%を使用できると報告します。RAMの使用を制限するにはどうすればよいですか?
[!!]可能な最大メモリ使用量:426.8M(インストールされているRAMの166%)
どちらかを設定できます
いずれかのエンジンにメモリを割り当てる前に、各ストレージエンジンでどのキャッシングが行われるかを検討することをお勧めします
使用される主なメカニズムはキーキャッシュです。 .MYIファイルからのインデックスページのみをキャッシュします。キーキャッシュのサイズを変更するには、次のクエリを実行します。
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キーキャッシュの推奨設定( key_buffer_size )が得られます( クエリは4Gで推奨をキャップします( 4096M) 32ビットOSの場合、4GBが上限です。64ビットの場合、8GBです。
使用される主なメカニズムは、InnoDBバッファープールです。アクセスされたInnoDBテーブルからデータとインデックスページをキャッシュします。 InnoDBバッファープールのサイズを設定するには、次のクエリを実行します。
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;
これにより、現在のデータセットでのInnoDBバッファープールのサイズの推奨設定( innodb_buffer_pool_size ))が得られます。
InnoDBログファイル(ib_logfile0およびib_logfile1)のサイズを変更することを忘れないでください。 MySQLソースコードは、すべてのInnoDBログファイルの合計サイズの上限を4G(4096M)未満にする必要があります。 (注:Perconaサーバーのバイナリはこれを超えています。最近、単一のInnoDBログファイル用に4Gの大規模DBサーバーを innodb_log_file_size を使用してセットアップしました)
簡単にするために、ログファイルが2つしかない場合のサイズを以下に示します。
両方のクエリの最後にインラインクエリがあります:(SELECT 2 PowerOfTwo) B
(SELECT 0 PowerOf1024)
は設定をバイト単位で示します(SELECT 1 PowerOf1024)
は設定をキロバイトで示します(SELECT 2 PowerOf1024)
はメガバイト単位の設定を示します(SELECT 3 PowerOf1024)
は設定をギガバイトで示します常識に代わるものはありません。メモリが限られている、ストレージエンジンが混在している、またはそれらの組み合わせがある場合は、さまざまなシナリオに合わせて調整する必要があります。
2GB RAMおよび16GBのInnoDBがある場合、innodb_buffer_pool_size
として512Mを割り当てます。
2GB RAM=および4GBのMyISAMインデックスがある場合、512Mをkey_buffer_size
として割り当てます。
2GB RAMと4GBのMyISAMインデックスと16GB InnoDBがある場合、key_buffer_size
として512Mを割り当て、innodb_buffer_pool_size
として512Mを割り当てます。
可能なシナリオは無限です!!!
何を割り当てても、DB接続とオペレーティングシステム用に十分なRAMを残してください)。
key_buffer_size
でinnodb_buffer_pool_size
とmy.cnf
を微調整する必要があります。これら2つはメモリ関連の最も重要な設定です。現在の値を取得するには、mysql
コマンドラインクライアントでshow variables like 'key_buffer_size';
およびshow variables like 'innodb_buffer_pool_size';
を使用します。
myisamエンジンの場合
key_buffer_size +(read_buffer_size + sort_buffer_size)* max_connections
この値は、mysqlが消費できるメモリの合計を示します。これは、RAMまたはRAMの60%未満です。innodbの場合innodb_buffer_pool_sizeは、あなたのRAMまたはRAMの60%
上記の値を調整して、RAM使用量がRAMの60%になるようにします。