我在虚拟机上有一个 Mysql 服务器
16核CPU
59 GB 内存
Ubuntu 13.10
Mysql版本是5.5.37
这是一个仅用于报告目的的从属数据库。
因为原有的 Mysql innodb_buffer_pool_size(49G) 太大,服务器使用 SWAP。所以我将 innodb_buffer_pool_size 设置为 35G,然后重启服务器(10/12)。然而,内存使用率逐渐升高,两天后几乎达到物理内存的 90%。我认为这不合理,因为 innodb_buffer_pool_size 是 35G,其他 Mysql 操作不会使用这么多内存。
如果服务器有交换,我会担心数据库性能。但我不知道如何停止 Mysql 内存使用。我不明白为什么它会逐渐使用这么多内存。
几天后,服务器在第二次重启(11 月 28 日)后开始有交换
有人能给我一些提示,确保 mysql 服务器不会逐渐出现高 RAM 使用率吗?或者我需要考虑一些事情。ubuntu 是否有一些设置会导致 RAM 消耗?
非常感谢。
Mysql配置:
https://gist.github.com/crokobit/7c329e48dc5ab234c0b1812248ff77cf
答案1
从 my.cnf 中注释掉以下几行:
sort-buffer-size = 4M
read-buffer-size = 2M
read-rnd-buffer-size = 2M
join-buffer-size = 4M
如果是专用的 mysql 服务器,则将缓冲池设置为高达 50G,检查 NUMA 设置并进行相应配置。
将系统 swappiness 改为 1 (如果你使用的是较新的内核)
升级到最新的 mysql 版本,您的版本可能会受到一些内存泄漏错误的影响。
答案2
没有神奇的“使用更少的 RAM 开关”,因此通常采用系统管理员的方法了解正在发生的事情并采取适当的措施。科学方法是你的朋友
- 安装监控
- 收集数据(来自监控和其他工具)
- 分析数据
- 根据分析做出改变
- 监控变化的影响
- 根据需要冲洗并重复
- 记录最终有效的方法。
如果你自己无法管理,那么聘请一位专业人士(DBA / Sysadmin),最终可能比你自己尝试做更便宜。