概要
- このへんの本を読んで復習がてらに書いてく
計算式
- (物理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);