更新时间:2023-09-07 GMT+08:00

磁盘使用率高问题排查

使用文档数据库服务时,如果实例的磁盘使用率过高或完全被使用,将会导致实例不可⽤。

本章节帮助您分析解决DDS实例磁盘使用率高的问题。

查看磁盘使用情况

DDS目前提供如下两种方法用于查看实例磁盘的使用情况。

  1. 通过DDS控制台查看磁盘使用情况。

    您可以登录DDS控制台,单击目标实例名称,进入“基本信息”页面,在“存储空间”区域可以查看到当前实例的磁盘使用情况。

    图1 查看磁盘使用情况
  2. 通过查看监控指标(磁盘利用率和磁盘使用量)判断实例磁盘的使用情况。

    如何查看监控指标请参见查看监控指标

    图2 查看磁盘使用情况

解决方案

  1. 对于集群实例,可能是因为选择和设置的分片不合理导致数据分布不均衡,从而引起磁盘空间使用率高的情况。

    此时,可以对数据库集合进行合适的分片,具体操作请参见设置数据分片以充分利用分片性能

  2. 随着业务数据的增加,原来申请的数据库磁盘容量不足。此时建议扩容磁盘空间,确保磁盘空间足够。

    如果原有实例规格的磁盘已是最大的,请先升级规格。

  3. 存在大量过期的数据文件占用磁盘空间,此时需要及时处理过期数据文件。例如:如果整个库不需要了,则可以执行dropDatabase命令进行删除,从而快速释放磁盘空间。
  4. 后台数据处理机制原因。

    无论写入、更新或删除(包括索引插入和删除)等操作,在后台实际上都会转成写入。实例在使用过程中,删除数据并不会回收磁盘空间,这些未被回收的磁盘空间被称为磁盘碎片。磁盘碎片会被数据库继续使用,当有新数据插入时,会重复利用这些碎片,而不需要新申请磁盘空间。根据底层存储引擎的不同(RocksDB和WiredTiger),又会有不同的具体表现。

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

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