mabots' blog

知のレバレッジを最大化せよ (旧はてなダイアリーから移転しました。)

MySQLのサーバのメモリ消費量を計算してくれるツール(perl)


MySQLが結局どれくらいDBサーバーのメモリを圧迫しうるのか、サービス運用者としては知っておきたいところですが、それを今あるmy.cnfから算出してくれるPerlスクリプトがあるようです。my.cnfのpathを指定しながら実行します。

ソースの中身など参考にして、運用ツールをつくってみるのもいいのかも。

Estimate MySQL Memory Consumption
http://forge.mysql.com/tools/tool.php?id=44


$./mysql-memory-usage my-huge.cnf
/usr/local/mysql/libexec/mysqld will use at most:
426.0 MB for global stuff
20.2 MB per thread
2.4 GB total (with 100 active threads)
and additionally:
16.0 MB for each HEAP table
16.0 MB for each temporary table


そもそもの算出項目としては自分用メモも兼ねて参考。ソートジョイン多用したSQLでusiong temporaryを吐くとmy.cnfの設定値によっては、一気にMEM使いすぎでサーバーのレスポンス低下とかレプリケーション遅延とかになってしまいます。DBサーバのOS・他M/W、MySQL拡張の類の状況をみて最大設定値を計算しましょう。

  • コネクションごとに発生する要素
    • sort_buffer_size
    • join_buffer_size
    • read_buffer_size
    • read_rnd_buffer_size
    • max_allowed_packet
      • の合計がコネクションごとの消費メモリで想定最大コネクション数max_connectionsに対して乗ずれば算出できる
  • 固定的に発生する要素
    • key_buffer_size
    • query_cache_size
    • innodb_buffer_pool_size
    • innodb_additional_mem_pool_size
    • innodb_log_buffer_size
      • の合計が定常的に確保されるメモリ領域となる


参考サイト