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)。如果需要,很高兴发布更多配置。
由于 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 作为我的总配置使用量 - 是时候降低一些数字了!)