MySQL関連のメモ。
実際に業務で見ている主にメモリ周りのパラメータについて。特別なノウハウ等は入っていない基礎知識程度です。
——————–
MySQLのバッファには以下の2種類のタイプがある。パラメータチューニングの際にはこの2つのタイプの違いを意識しないといけない。
* グローバルバッファ (mysqld内部で1つだけ確保される)
* スレッドバッファ (スレッド毎に確保される)
スレッドバッファに多くのメモリを割り当てすぎるとコネクションが増えた途端すぐにメモリ不足に。物理メモリ以上のサイズを割り当ててしまうと、スワップが発生して逆にパフォーマンスが落ちる。
innodb_buffer_pool_size (グローバル) |
---|
InnoDBのデータやインデックスを保持するために使用するメモリバッファのサイズ。グローバルなのでたくさん割り当てると良い。 |
innodb_additional_mem_pool_size (グローバル) |
InnoDBの内部データなどを保持するために使用するメモリプールのサイズ。エラーログに警告が出たら増やせばいい程度。 |
innodb_log_buffer_size (グローバル) |
InnoDBの更新ログを記録するために使用するメモリバッファのサイズ。大きなトランザクションがある場合はこれを大きくするとディスクI/Oを減らせるが実際はそんなに必要ない。 |
sort_buffer_size (スレッド) |
ORDER BYやGROUP BYの時に使用されるメモリバッファのサイズ。スレッドバッファなので大きくしすぎてメモリ不足にならないように。 |
read_rnd_buffer_size (スレッド) |
ソート後にレコードを読むときに使用されるメモリバッファのサイズ。これもORDER BYやGROPY BYを行う場合のパフォーマンスに影響する。 |
join_buffer_size (スレッド) |
インデックスを用いないテーブル結合時に使用されるメモリバッファのサイズ。 |
read_buffer_size (スレッド) |
インデックスを用いないテーブルスキャン時に使用されるメモリバッファのサイズ。 |
key_buffer_size (グローバル) |
MyISAMのキー(インデックス)を保持するために使用するメモリバッファのサイズ。グローバルなのでたくさん割り当てると良い。ただし、MyISAMを利用してない場合は他のパラメータにメモリを回す。 |
myisam_sort_buffer_size (スレッド) |
MyISAMでソート時(REPAIR TABLE, CREATE INDEX, ALTER INDEX)に使用するメモリバッファのサイズ。ORDER BYやGROUP BYを行う場合のパフォーマンスに影響する。 |
* その他
innodb_log_file_size |
---|
InnoDBの更新ログを記録するディスク上のファイルサイズ。 |
1MB<innodb_buffer_pool_size/innodb_log_files_in_groupの間で設定する。 |
ちなみに、MySQL5.5ではデフォルトストレージエンジンはInnoDBらしいです。ただ、業務で5.5導入するのは当分先になりそうですが。。