如何计算mysql max_connections?

您要考虑什么?

评论

好问题,我也想知道答案。阅读有关此旧博客的信息:mysqlhacker.com/kabir/performance/…

#1 楼

将发布此信息作为答案以及相关信息。基本公式为:

可用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 query_cache_size
线程缓冲区:sort_buffer_size,myisam_sort_buffer_size,read_buffer_size,join_buffer_size,read_rnd_buffer_size,thread_stack

评论


KCD提供此链接作为最大内存计算器:mysqlcalculator.com

–德里克·唐尼(Derek Downey)
13年4月26日在13:15

Derek,您的意思是“全局缓冲区=所有全局缓冲区变量的总和,而线程缓冲区=所有线程缓冲区变量的总和”?

–垫子
17-2-27在21:04

@DerekDowney您应该添加内存计算器作为答案。谢谢。

–辛
19/12/10在9:58

#2 楼

警告!这是从2011年开始使用MySQL5.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;


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

评论


我刚刚读了你的公式。非常漂亮! BTW +1 !!!

– RolandoMySQLDBA
2011年7月20日在20:43

考虑到5.5和5.6中的所有更改,可能是时候重新考虑这个公式了,但是还是很方便的。

–随机
2012年8月9日15:28

khankennels.com/presentations/pdf/performance_tuning.pdf

–易卜拉欣
2012年11月20日在20:42

#3 楼

我盯着简单计算得出的数字:Expected_number_of_requests_per_second * Expected_average_request_processing_time * 2.

为了以后进行调整,我始终使用带有历史数据的监视系统,并尝试将其保留20%
当您使用一些连接池时(这通常是个好主意),这会有些复杂-然后您需要监视池中已使用的连接数。