LoginSignup
47
46

More than 5 years have passed since last update.

MySQLに割り当てるバッファサイズの計算方法

Posted at

概要

計算式

  • (物理RAMの合計) ― {max_connections x (スレッドバッファによる消費) + グローバルバッファによる消費} > 0
  • グローバルバッファ + スレッドバッファで消費されるであろうメモリサイズが物理メモリサイズを超えないようにする
  • 物理RAM:r3.2xlargeで61GB

グローバルバッファ(サーバ全体に設定されるオプション)

  • すべての接続とクエリに影響する
  • mysqldが獲得できるRAMの量を計算し、バッファサイズの合計がこれを超えないようにする

オプション

  • query_cache_size
  • innodb_additional_mem_pool_size
  • innodb_buffer_pool_size
  • innodb_log_buffer_size
  • key_buffer_size

消費メモリ計算式(GB表示)

SELECT(@@query_cache_size + @@innodb_additional_mem_pool_size + @@innodb_buffer_pool_size + @@innodb_log_buffer_size + @@key_buffer_size)/(1024*1024*1024);

スレッドバッファ(特定の処理に割り当てられるバッファ)

  • サーバが特定の処理を実行しなければならないときに必要に応じて割り当てられる
  • 割り当て可能なRAMの量を正確に計算するのは難しい。
  • クエリを分析して、どれが大量のリソースを要求しているか調べ、すべての変数の合計結果を計算する

オプション(1スレッド1回割り当て)

  • read_rnd_buffer_size
  • sort_buffer_size
  • myisam_mmap_size
  • myisam_sort_buffer_size
  • bulk_insert_buffer_size
  • preload_buffer_size

オプション(スレッドごとに複数回割り当てられるもの)

  • join_buffer_size
  • read buffer size
  • tmp_table_size

消費メモリ計算式(GB表示)

  • (バッファサイズ)(特定のクエリに割り当てられたバッファの数)(並行して実行されるクエリの数)
Set @join_tables = スレッド毎にjoinされるテーブル数の平均
Set @scan_tables = スレッド毎に読まれるテーブル数の平均
Set @tmp_tables  = スレッド毎に読まれるtmpテーブル数の平均

SELECT @@max_connections * (@@global.read_rnd_buffer_size +
@@global.sort_buffer_size + @@myisam_mmap_size +
@@global.myisam_sort_buffer_size + @@global.bulk_insert_buffer_size +
@@global.preload_buffer_size + @@global.join_buffer_size * IFNULL(@join_tables,
1)+@@global.read_buffer_size * IFNULL(@scan_tables,1)+
@@global.tmp_table_size * IFNULL(@tmp_tables,1))/(1024*1024*1024);
47
46
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
46