MySQL(MariaDB)内存计算和使用率蠕变

MySQL(MariaDB)内存计算和使用率蠕变

我使用了 mysql 内存计算器(http://www.mysqlcalculator.com) 来估算我的专用 mysql 服务器(具有 8GB RAM 和 4CPU)的内存使用情况。

这些是实际数字和我的用量计算:

binlog_cache_size                   32.00 KB
innodb_buffer_pool_size             5120.00 MB
innodb_log_buffer_size              8.00 MB
join_buffer_size                    1.00 MB
key_buffer_size                     128.00 MB
max_connections                     150
query_cache_size                    0
read_buffer_size                    128.00 KB
read_rnd_buffer_size                256.00 KB
sort_buffer_size                    2.00 MB
thread_stack                        292.00 KB
tmp_table_size                      32.00 MB
=================================== ==========
Total Max Memory                    5841.73 MB
=================================== ==========

在一周的时间内,内存不断增加,远远超出了预计的计算范围,直到它消耗了几乎全部 8GB,并且直到引擎重新启动时才回落。

所以我的猜测是,计算中省略了一些变量,导致了这种过度使用。

关于如何解决此问题,有什么建议吗?

答案1

好的,该计算器似乎有错误(http://www.mysqlcalculator.com/) 。

tmp_table_size

应包含在每个连接的计算中,而不是在基本内存计算中。

基本内存变量是 max_connections 上面列出的变量,每个连接的变量列在下面。

这对计算产生了很大的影响,也是实际使用情况与计算不符的原因。

这是由以下人员提供的:@克里斯托弗·舒尔茨

SELECT ( @@key_buffer_size
+ @@query_cache_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
+ @@tmp_table_size )
) / (1024 * 1024 * 1024) AS MAX_MEMORY_GB;

答案2

不幸的是,mysqlcalculator.com 忽略了一些重要的设置。另一个答案并不完整。这是来自一个方便的MySQL/MariaDB 调优文章

SELECT (
       (
           @@binlog_file_cache_size +
           @@innodb_buffer_pool_size +
           @@innodb_log_buffer_size +
           @@key_buffer_size +
           @@query_cache_size +
           ( @@max_connections *
               ( @@binlog_cache_size +
                 @@binlog_stmt_cache_size +
                 @@bulk_insert_buffer_size +
                 @@join_buffer_size +
                 @@max_allowed_packet +
                 @@read_buffer_size +
                 @@read_rnd_buffer_size +
                 @@sort_buffer_size +
                 @@thread_stack +
                 @@tmp_table_size
               )
           ) +
           ( @@slave_parallel_threads * 
             ( @@slave_parallel_max_queued )
           ) +
           ( @@open_files_limit * 1024)
       ) / 1024 / 1024 / 1024) AS max_memory_GB;

调整这些设置直到所有内容适合您的 RAM。

披露:我写了所引用的文章。

相关内容