使用mariabackup备份数据库时Swap占用过高问题咨询
MariaBackup备份时Swap占用过高问题排查与优化
问题背景
使用MariaBackup备份数据库时,每日凌晨1点执行备份期间Swap占用率骤升至100%,直至上午10点左右才恢复正常。环境为AlmaLinux 8.4虚拟机,配置60GB物理内存、4GB Swap分区;日常非备份时段内存使用率70-80%、Swap使用率70-80%,已设置vm.swappiness=0但无改善,备份/非备份时段内存使用率均保持相对稳定。

原因分析
- MariaBackup的缓存挤占效应:备份过程需要扫描并读取全量数据库数据页,会大量占用文件系统缓存。日常内存已用70-80%,属于资源紧张状态,备份时缓存需求进一步挤压剩余可用内存空间。即使
vm.swappiness=0(优先使用物理内存),当内存中活跃进程的内存无法释放、缓存空间被占满时,系统仍会将非活跃内存页置换到Swap。 - 日常Swap高占用的累积影响:平时Swap已占用70-80%,说明系统长期处于内存过载边缘,备份操作的额外压力直接触发Swap耗尽。
- 内存使用率的“稳定”假象:内存使用率统计包含缓存/缓冲部分,备份时只是缓存内容被替换,整体使用率看似无明显变化,但实际活跃进程内存+备份缓存的总需求已触碰到物理内存瓶颈,只能依赖Swap补充。
是否正常?
这种情况完全不正常。长期高Swap占用会导致磁盘IO性能下降,拉长备份时长,还可能引发系统响应变慢、数据库业务性能波动等连锁问题,说明当前系统资源配置无法支撑备份操作的额外需求。
优化建议
1. 根源性内存资源调整
- 优先增加物理内存,将日常内存使用率控制在60%以下,从根本缓解内存压力,这是最有效的解决方案。
2. MariaBackup参数优化
- 用
--parallel=N限制备份并行线程数(N根据CPU核心数调整,比如设为4),避免一次性读取过多数据导致缓存暴涨。 - 启用
--compress+--compress-threads=N参数,压缩备份数据,减少临时内存占用与磁盘IO负载。 - 通过
--tmpdir=/path/to/ssd指定SSD作为临时目录,降低IO等待导致的内存页滞留时间。
3. 系统层面优化
- 清理服务器上不必要的后台进程、服务,释放日常内存占用。
- 调整
vm.vfs_cache_pressure参数(默认100),建议设为50:
该参数降低后,系统会更倾向于保留文件缓存,减少非活跃内存页被置换到Swap的概率。sysctl -w vm.vfs_cache_pressure=50 # 永久生效需写入/etc/sysctl.conf - 若暂时无法增加物理内存,可临时扩大Swap分区(比如扩容至8GB),但这仅为临时缓解手段,无法解决内存不足的核心问题。
4. 备份时间调整
将备份任务调整到业务低峰期(比如凌晨3-5点,若业务允许),此时系统内存占用更低,能减少备份与业务的资源竞争。
内容的提问来源于stack exchange,提问作者Kévin Pemonon
相关产品推荐
相关产品推荐

