Subscribe to RSS Feed ログイン

CentOS設定メモ

MySQLメモリ最適化

MySQLを利用したWebサービスなど開発してると、データ量の増加にともなって劇的に遅くなることがあります。(1クエリで5秒超えるなど)
ほとんどの場合はインデックスが適切に張られていないか、メモリ割り当てが不適切でSWAPが発生しまくってる状態が多いようです。
今回は私が普段目安にしているMySQLのメモリ割り当てのメモ。

基本は
innodb_buffer_pool + key_buffer = MySQLに割り当て可能なメモリの2/5
(read_buffer+sort_buffer)×同時接続数 = MySQLに割り当て可能なメモリの2/5
table_cahce = 推奨値 テーブル数×同時接続数
その他項目の合計値 = 1/5

DBサーバーとしてMySQL以外にサービスを動かしていないサーバーでメモリ搭載量12GB(64bitOSじゃないと意味ないので注意)の場合は

MySQLメモリ割り当て = 10GB
同時接続数 = 200
テーブル数 = 50

innodb_buffer_pool + key_buffer = 4GB
innodb_buffer_pool = 2GB
key_buffer = 2GB
※innodbテーブルが多い場合は振り分けを変更

(read_buffer+sort_buffer)×200 = 4GB
read_buffer =20M
sort_buffer = 20M

tabe_cache = 10000 としたいところだが、推奨値が < 2048 なのでいったん
tabe_cache = 2048 で様子見

とします。
メモリ割り当て間違えるとこれまたSWAPが発生しまくって逆にパフォーマンスが下がるので注意。


コメントのRSSを取得する · トラックバック

コメントする