你如何计算mysql max_connections 变量?

Gab*_*mon 42 mysql my.cnf max-connections configuration

你如何计算 mysql max_connections ?

你有什么考虑?

Der*_*ney 31

将此作为答案发布,并附上相关信息。基本公式为:

可用 RAM = 全局缓冲区 +(线程缓冲区 x max_connections)

max_connections =(可用 RAM - 全局缓冲区)/线程缓冲区

要获取缓冲区列表及其值:

SHOW VARIABLES LIKE '%buffer%';
Run Code Online (Sandbox Code Playgroud)

这是缓冲区的列表以及它们是全局还是线程:

全局缓冲区: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

  • KCD 提供此链接作为最大内存计算器:http://www.mysqlcalculator.com/ (2认同)

ran*_*omx 11

警告!这是从 2011 年开始使用 MySQL 5.1.x。使用风险自负

---- 原帖----

这是存储过程形式的另一个替代公式:

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;
Run Code Online (Sandbox Code Playgroud)

我假设您使用的是 MySQL 数据库 > 5.1.x 版并且您是特权用户。但是您可以通过插入您想要的任何数字来使用最大连接数并查看结果。

  • 考虑到 5.5 和 5.6 中的所有变化,可能是时候重新审视这个公式了,但它仍然有点方便。 (2认同)