我注意到我跟踪到 MariaDB 的系统内存使用百分比(由 sar 报告)稳步增加。这似乎与数据库负载无关:这种增加与查询数量的增加不匹配。
我有以下尺寸配置:
key_buffer_size = 400000000
innodb_buffer_pool_size = 1210612736
总共有 1.5GB,但现在在 RSS 内存上已达到 2.3GB。
为什么越来越贪心?我可以让它更好地坚持它的极限吗?或者它可能坚持 InnoDB 的限制,但正在将内存用于其他用途,如果是这样,有没有办法理解这一点,以便我可以调整配置以将总内存使用量保持在一定水平?或者它可能就像 Linux 内核一样,只是在空闲时使用所有空闲内存进行缓存,但在需要时很乐意放弃它?
我在 Debian 10 (Buster) 上使用 MariaDB 10.3.22。工作负载是一个网络服务器(所以我需要为其他进程保留一些内存:nginx+php)。如果需要,很高兴发布更多配置。
由于 Gordon 的回答和其中的链接,由于论坛的功劳,以下命令将告诉您 MySQL/MariaDB 数据库需要多少:
(我是 OP,这提供了 2.9GB 作为我的总配置使用量 - 是时候降低一些数字了!)
您列出的内存设置是共享的。每个线程还分配了各种缓冲区。这是 MySQL 内存计算器的链接:
https://www.mysqlcalculator.com/
如果您想限制 MariaDB 的整体内存使用量,假设您使用
apt
/安装它apt-get
,您应该可以使用systemd.resource-control(5)来完成此操作。使用 root 调用:
在显示的编辑器中输入以下配置,如果需要,可以进行调整:
保存并退出。它立即生效,并由 cgroup 内存控制器支持。
让我们把它分开:
没有“完美”的公式。mysqlcalculator 网站有很多缺陷。与任何其他声称有公式的网站一样。
如果您使用的是 MyISAM(或 MyISAM 和 InnoDB 的混合物),请参阅http://mysql.rjweb.org/doc.php/memory