我在生产中有一个 MySQL 数据库,我正在尝试计算优化数字以将 MySQL max_connections 值设置为 - 我这样做是否正确,因为我的总和对我来说似乎很高。
据我所知,使用本文末尾添加的 URL 从下面的链接中可以看出逻辑如下:
我已通过 ssh 连接到相关服务器,并在 MySQL 终端中使用类似于此 SHOW VARIABLES LIKE '%buffer%';
的查询找到了相关变量。这给了我这样的变量信息..
Available RAM = Global Buffers + (Thread Buffers x max_connections)
max_connections = (Available RAM – Global Buffers) / Thread Buffers
要找出可用的 RAM,我只需运行 free -b
在返回这个的终端中:
为了计算相关的 Globa 缓冲区和线程缓冲区,我只是根据这些值将值相加Global Buffers: key_buffer_size, innodb_buffer_pool_size, innodb_log_buffer_size, innodb_additional_mem_pool_size, net_buffer_size, query_cache_size
Thread Buffers: sort_buffer_size, myisam_sort_buffer_size, read_buffer_size, join_buffer_size, read_rnd_buffer_size, thread_stack
这给了我以下数字:Global Buffers = (67108864 + 2147483648 + 16777216 + 0 + 0 + 33554432) = 2264924160
Thread Buffers = (1048576 + 67108864 + 1048576 + 1048576 + 8388608 + 262144) = 78905344
所以使用这个逻辑 - max_connections = (Available RAM – Global Buffers)/Thread Buffers
我认为计算是正确的 - 这给了我 1680 个 max_connections .. 这看起来正确吗?max connections = (134902571008 - 2264924160) / 78905344 = 1680.97165698
最佳答案
你的推理是合理的,但你没有考虑到一些事情。
tmp_table_size
和 join_buffer_size
.SHOW PROCESSLIST
中查看它们,其中 990 个是“休眠”的。 .也就是说,它们已连接,但在任何给定时刻都不运行查询。有点像当您通过 ssh 连接到服务器但您的 shell 只是坐在提示符处还没有运行命令时。底线是 RAM 分配不是一门精确的科学。你不应该试图通过计算来优化它。
相反,通过随着时间的推移观察系统并尝试逐步提高值来优化它,看看它是否可以在不过度分配 RAM 的情况下提高 SQL 性能。这样,分配的大小将适合您需要它服务的 SQL 客户端流量。
关于mysql - 我是否正确计算了 MySQL 数据库的最大连接限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64156821/