You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mariabackup备份数据库时Swap占用过高问题咨询

MariaBackup备份时Swap占用过高问题排查与优化

问题背景

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

Grafana RAM/SWAP监控

原因分析

  • 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:
    sysctl -w vm.vfs_cache_pressure=50
    # 永久生效需写入/etc/sysctl.conf
    
    该参数降低后,系统会更倾向于保留文件缓存,减少非活跃内存页被置换到Swap的概率。
  • 若暂时无法增加物理内存,可临时扩大Swap分区(比如扩容至8GB),但这仅为临时缓解手段,无法解决内存不足的核心问题。

4. 备份时间调整

将备份任务调整到业务低峰期(比如凌晨3-5点,若业务允许),此时系统内存占用更低,能减少备份与业务的资源竞争。


内容的提问来源于stack exchange,提问作者Kévin Pemonon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:18:10