• 【Mongo】数据删了磁盘空间但没有减少


    Author:skate

    Time:2023/10/22

    一、问题描述

    产线用户反馈,一个华为云的mongo实例磁盘空间告警,使用率超过90%(使用状况 1630.9/1800GB),让其通过数据库运维平台找到占用大空间的表,然后清理历史数据;用户清理数据后,发现使用的磁盘空间没有减少

    二、问题分析

    华为云mongo实例信息:

    配置:| 2 vCPUs | 4GB

    版本:4.0

    存储引擎:WiredTiger

    磁盘使用率:90.61%(使用状况 1630.9/1800 GB)

    查看占用磁盘空间大的表

    通过数据库运维平台查看如上三个表占用磁盘空间最大,而且数据逻辑大小远远小于数据占用的存储空间,说明数据清理产生了有大量的碎片;一般来说磁盘碎片会被数据库继续使用,当有新数据插入时,会重复利用这些碎片。

    但是我们目前碎片占用空间太大,需要回收下

    三、解决方案

    可以通过如下命令回收集合的的磁盘碎片

    db.runCommand({compact:"",force:true})

    因为MongoDB 4.4及之前的版本执行compact命令会导致集合所属的数据库被锁定,且该数据库的读写操作将被阻塞,建议在业务低峰期操作,操作的步骤如下

    1、先在备库执行compact命令

    db.runCommand({compact:""})

    2、然后主备切换

    3、在新的备库执行compact命令

    db.runCommand({compact:""})

    A.阿里云的mongo实例说明

    阿里云的mongo实例,如果需要compact,需要我们自己按如上步骤手工操作

    B.华为云的mongo实例特殊说明:

    默认华为云的mongo实例的管理员用户rwuser默认是没有执行compact权限的,如果需要执行这个命令,联系华为云工程师,让华为云工程师帮其在后台执行(或者升级mongo实例的小版本,向华为云申请开通compact命令权限),这个compact命令是低频的,目前命令提供给华为云执行即可。

    RocksDB在删除数据后,将删除操作直接转化为追加写,在积攒了一定数据量的冗余数据后,会自动触发后台compact线程对同一数据的多版本进行归并聚合,从而释放多余的磁盘空间,因此建议等待系统自动回收。当磁盘空间使用率较高,接近只读状态阈值时,手工操作回收

    WiredTiger在删除数据,进行数据多版本归并聚合后,也会空余出磁盘空间碎片,但wiredTiger并不会将这部分磁盘空间返还给操作系统,而是打上标记预留给当前collection后续的写入,此collection后续的写入会优先使用这部分预留的磁盘空间,如果需要释放这部分磁盘空间,可以尝试通过执行compact命令进行释放(注:此命令会阻塞正常业务)。

    具体操作步骤:

    1、通过数据库运维平台查看哪些集合占用磁盘空间大、碎片率高,碎片率超过50%就要注意了

    2、在备库执行集合压缩命令(降低对主库的写操作的阻塞,在业务低峰期操作)

    use tbm
    db.runCommand({compact:"zjthStdTag"})     //耗时:424.702s (7.08min)
    db.runCommand({compact:"ztzbStdTag"})   //耗时:379.738s (6.33min)
    db.runCommand({compact:"hrkStdTag"})    //耗时:46.857s

    3、主备库倒换

    4、在新备库执行集合压缩命令

    use tbm
    db.runCommand({compact:"zjthStdTag"})
    db.runCommand({compact:"ztzbStdTag"})
    db.runCommand({compact:"hrkStdTag"})

    把2-4步骤发给华为云工程师,让其在后台执行帮手工回收集合磁盘空间

    四、结果收益

    经过compact后,磁盘利用率从90%降低到25%,磁盘空间回收了1180G

    ---end---

  • 相关阅读:
    代码随想录算法训练营第十天|二叉树完结
    Linux中使用Shell脚本安装jdk
    14.3.1 语法格式
    JS中常见的遍历方法
    借助这个宝藏神器,我成为全栈了
    图解算法数据结构-LeetBook-栈和队列04_望远镜中最高的海拔_滑动窗口
    关于白盒测试,这些技巧你得游刃有余~
    网工基础知识——以太网
    在线PDF查看器和PDF编辑器:GrapeCity Documents PDF (GcPdf)
    Python装饰器(包装函数、拦截函数)
  • 原文地址:https://blog.csdn.net/wyzxg/article/details/133988578