MariaDB 内存使用量超出配置大小

art*_*bot 2 mysql memory-usage mariadb debian-buster

我注意到我跟踪到 MariaDB 的系统内存使用百分比(如 sar 报告)稳步增加。它似乎与数据库负载无关:这种增加与查询数量的增加不匹配。

内存使用图

我有以下尺寸配置:

key_buffer_size         =  400000000                                                                                  
innodb_buffer_pool_size = 1210612736 
Run Code Online (Sandbox Code Playgroud)

总共有 1.5GB,但它现在在 RSS 内存上达到了 2.3GB。

为什么变得这么贪婪?我可以让它更好地坚持它的极限吗?或者它可能坚持 InnoDB 的限制,但将内存用于其他用途,如果是这样,有没有办法理解这一点,以便我可以调整配置以将总内存使用量保持在一定水平内?或者它可能就像 Linux 内核一样,只是在空闲时使用所有空闲内存进行缓存,但根据需要愉快地放弃它?

我在 Debian 10 (Buster) 上使用 MariaDB 10.3.22。工作负载是一个网络服务器(所以我需要为其他进程保留一些内存:nginx+php)。如果需要,很高兴发布更多配置。

art*_*bot 5

由于 Gordon 的回答和其中的链接,forumla 的功劳,以下命令将告诉您 MySQL/MariaDB 数据库需要多少:

SELECT ROUND(
    ( @@GLOBAL.key_buffer_size                     
     + @@GLOBAL.query_cache_size 
     + @@GLOBAL.tmp_table_size 
     + @@GLOBAL.innodb_buffer_pool_size 
     + @@GLOBAL.innodb_log_buffer_size 
     + @@GLOBAL.max_connections * ( 
         @@GLOBAL.sort_buffer_size
       + @@GLOBAL.read_buffer_size 
       + @@GLOBAL.read_rnd_buffer_size 
       + @@GLOBAL.join_buffer_size 
       + @@GLOBAL.thread_stack 
       + @@GLOBAL.binlog_cache_size)
    ) / 1024 / 1024, 1) `total MB`;
Run Code Online (Sandbox Code Playgroud)

(我是 OP,这给出了 2.9GB 作为我的总配置使用量 - 是时候降低一些数字了!)


Gor*_*bić 4

您列出的内存设置是共享的。每个线程还分配有各种缓冲区。以下是 MySQL 内存计算器的链接:

https://www.mysqlcalculator.com/