MySQL 會依照 my.cnf 的設定來決定記憶體的使用量, 是否有公式可以計算 MySQL 在目前設定下, 最高的記憶體使用量會是多少?
註: 此篇計算針對 Innodb.
計算 MySQL 可能用到的記憶體數量
官方說明: How MySQL Uses Memory
查看記憶體使用量 的 公式: (公式取自上述官方網頁)
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'innodb_additional_mem_pool_size';
SHOW VARIABLES LIKE 'innodb_log_buffer_size';
SHOW VARIABLES LIKE 'thread_stack';
SET @kilo_bytes = 1024;
SET @mega_bytes = @kilo_bytes * 1024;
SET @giga_bytes = @mega_bytes * 1024;
SET @innodb_buffer_pool_size = 2 * @giga_bytes;
SET @innodb_additional_mem_pool_size = 16 * @mega_bytes;
SET @innodb_log_buffer_size = 8 * @mega_bytes;
SET @thread_stack = 192 * @kilo_bytes;
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
) ) / @giga_bytes AS MAX_MEMORY_GB;
結果
+---------------+
| MAX_MEMORY_GB |
+---------------+
| 3.7002 |
+---------------+
如果什麼都不管, 最多會用到 3.7G 的記憶體.