Mysql max_connectionsはどのように計算しますか?
何を考慮に入れていますか?
これを回答として、関連情報とともに投稿します。基本的な式は次のとおりです。
利用可能RAM =グローバルバッファ+(スレッドバッファx max_connections)
max_connections =(使用可能RAM-グローバルバッファー)/スレッドバッファー
バッファとその値のリストを取得するには:
SHOW VARIABLES LIKE '%buffer%';
次に、バッファのリストと、それらがグローバルかスレッドかを示します。
グローバルバッファー:key_buffer_size、innodb_buffer_pool_size、innodb_log_buffer_size、innodb_additional_mem_pool_size、net_buffer_size、query_cache_size
スレッドバッファー:sort_buffer_size、myisam_sort_buffer_size、read_buffer_size、join_buffer_size、read_rnd_buffer_size、thread_stack
警告!これは、MySQL 5.1.xを使用した2011年のものです。自己責任で使用してください
----オリジナルPOST ----
次に、ストアドプロシージャ形式の別の代替式を示します。
DELIMITER //
CREATE PROCEDURE sproc_show_max_memory ( OUT max_memory DECIMAL(7,4))
BEGIN
SELECT ( @@key_buffer_size + @@query_cache_size + @@tmp_table_size + @@innodb_buffer_pool_size + @@innodb_additional_mem_pool_size + @@innodb_log_buffer_size + @@max_connections * ( @@read_buffer_size + @@read_rnd_buffer_size + @@sort_buffer_size + @@join_buffer_size + @@binlog_cache_size + @@thread_stack ) ) / 1073741824 AS MAX_MEMORY_GB INTO max_memory;
END//
DELIMITER ;
CALL sproc_show_max_memory(@show_max_memory);
SELECT @show_max_memory;
MySQLデータベース>バージョン5.1.xを使用していて、特権ユーザーであると想定しています。しかし、必要な数を挿入して最大接続数で遊んで、結果を確認します。
私は単純な計算から得ている数値を見つめています:expected_number_of_requests_per_second * expected_average_request_processing_time * 2。
後で調整するために、私は常に履歴データを備えた監視システムを使用しており、ピークが発生した場合に備えて20%を確保するようにしています。いくつかの接続プーリングを使用している場合(これは通常は良い考えです)は少し複雑です-次に、プールで使用されている接続の数を監視する必要があります。