« 引越し | メイン | 再会 »

MySQL メモリ使用量の計算式

MySQLで使用するメモリの計算式は次のとおりです。

max_connections *
(sort_buffer_size
  + join_buffer_size
+ read_buffer_size
  + read_rnd_buffer_size
+ net_buffer_length
  + max_allowed_packet) <-- カッコ内は1接続あたりの使用メモリ

+ key_buffer_size
+ query_cache_size
+ innodb_buffer_pool_size
+ innodb_additional_mem_pool_size
+ innodb_log_buffer_size

データベース専用サーバであれば、この値が搭載メモリの8〜9割になるように設定するとよいでしょう。
Webサーバやアプリケーションサーバを兼ねるサーバなら、用途に合わせてその割合を減らします。

なお、32bit Linuxでは、1プロセスに割り当てる最大メモリサイズは4GBであるため、上記で4GBを超えるような設定をすると、MySQLがエラーして起動しません。

(2010.04.16追記)
スレッドバッファ分のmax_allowed_packetについては、メモリ使用量の計算式としては適切ではないので削除し、net_buffer_lengthを追加しました。
通信時のバッファについては、接続時にnet_buffer_lengthの値分確保されます。
この値はデフォルトでは16KB。
通信時に必要に応じて、最大でmax_allowed_packetまで拡張されます。
max_allowed_packetはデフォルトで1MB。


また、myisam_sort_buffer_sizeもスレッドバッファとして加算する方もいらっしゃるようです。
これは、MyISAMでREPAIR TABLE, CREATE INDEX, ALTER INDEX文を実行したとき使われるバッファで、デフォルトは8MB。
全文検索エンジンTritonnを使用する場合はなんと1GBとすることが推奨されています。
ですが、同時接続100のとき合計で100GB使用するかというと、そうではないので、接続時に必ずmyisam_sort_buffer_size分を確保するわけではないようです。

ということで、考え得る最大値という意味では、max_allowed_packetやmyisam_sort_buffer_size分を加算することは間違いではないのですが、すべての通信接続でこれらの値分を確保するわけではないので、パラメータチューニングにおける計算式からは削除しました。

トラックバック

このエントリーのトラックバックURL:
http://antas.jp/mtsys/mt-tb.cgi/142

この一覧は、次のエントリーを参照しています: MySQL メモリ使用量の計算式:

» MySQLメモリ使用量の計算 from kawama.jp
って、どうやればいいんだろう?? と思って調べてみたらドンピシャのエントリを発見... [詳しくはこちら]

» MySQLのメモリの設定… from Picoh Works
現在、自宅のサーバ上でblog(WordPress)とcacti(ネットワーク関連監視)のタメにMySQLを動かしている。 MySQLはデフォルト設定だと... [詳しくはこちら]

» 【MySQL】総メモリー使用量を算出するSQL作ってみた from もぐめぽろぐ
MySQLが使用するメモリを計算するのに毎回手動で計算するのはめんどいですよね。 なんかパールとかで設定ファイルよみこんで算出するツールとかもあるの... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

ANTAS(アンタス)