回收站占用 1T+ 的空间,如果直接 purge recyclebin对集群有什么影响

【 使用环境 】
生产环境

【 OB 】
【 使用版本 】
4.x

【问题描述】
1、回收站占用 1T+ 的空间,如果直接 purge recyclebin对集群有什么影响,有什么温和的清理方法
2、回收站有没有定时自动回收的机制

@论坛小助手

根据文档库中的信息,以下是针对您问题的详细解答:

1. 如果直接 PURGE RECYCLEBIN 对集群有什么影响?

影响分析:

  • 磁盘空间释放:执行 PURGE RECYCLEBIN 会一次性清理回收站中的所有对象(包括数据库、表、索引等),从而释放被占用的物理存储空间。如果回收站占用 1T+ 的空间,执行该操作后这些空间将被释放。
  • 性能影响:由于回收站中存储的对象较多(1T+ 的规模),执行 PURGE RECYCLEBIN 可能会对集群性能产生一定影响,具体表现为:
    • I/O 压力增加:清理操作需要扫描和删除大量数据,可能导致磁盘 I/O 增加。
    • 事务日志生成:清理操作会生成一定的 Redo 日志,可能对日志写入性能造成压力。
    • CPU 和内存消耗:清理过程中可能需要额外的 CPU 和内存资源来处理元数据更新。

注意事项:

  • 在生产环境中,建议避免在业务高峰期执行 PURGE RECYCLEBIN,以免对在线业务造成性能干扰。
  • 执行前可以通过以下命令查看回收站中的对象列表及其占用情况,确认是否需要清理:
    SHOW RECYCLEBIN;
    

2. 温和的清理方法

为了避免一次性清理带来的性能冲击,可以采用分批清理的方式,逐步释放回收站空间。以下是具体步骤:

方法一:按对象类型分批清理

  • 先清理索引(Index):
    PURGE INDEX object_name;
    
  • 再清理表(Table):
    PURGE TABLE object_name;
    
  • 最后清理数据库(Database):
    PURGE DATABASE object_name;
    

方法二:按时间分批清理

  • 根据 CREATETIME 字段筛选出较早进入回收站的对象进行清理。例如:
    SELECT OBJECT_NAME FROM RECYCLEBIN WHERE CREATETIME < '指定时间';
    
    然后逐个执行 PURGE 操作。

方法三:使用 obshell 工具

  • 如果回收站中有租户级别的对象,可以使用 obshell 工具分批清理。例如:
    /home/admin/oceanbase/bin/obshell recyclebin tenant purge {tenant_name | object_name} [-y]
    

3. 回收站是否有定时自动回收机制?

文档依据:

根据 文档片段 7文档片段 6,OceanBase 数据库支持配置回收站的定时清理机制,以减少回收站中数据的额外磁盘开销。

配置方法:

  • 回收站的定时清理周期可以通过参数 recyclebin_retention_time 进行设置。该参数表示回收站中对象的保留时间(单位为秒),超过该时间的对象会被自动清理。
  • 示例配置:
    ALTER SYSTEM SET recyclebin_retention_time = 86400; -- 设置为 1 天
    
  • 注意:默认情况下,recyclebin_retention_time 的值可能为较大值(如 7 天或更长),需要根据实际需求调整。

总结

  1. 直接 PURGE RECYCLEBIN 的影响:可能会对集群性能造成一定压力,尤其是在回收站占用 1T+ 的情况下。建议避免在业务高峰期执行。
  2. 温和的清理方法:可以通过按对象类型、按时间或使用 obshell 工具分批清理回收站中的对象。
  3. 定时自动回收机制:OceanBase 支持通过参数 recyclebin_retention_time 配置回收站的自动清理周期,建议根据生产环境的实际需求合理调整。

如果您还有其他疑问,请随时联系 OceanBase 的人工答疑团队获取进一步支持!

详情请参考:

  1. 回收站
  2. OceanBase 数据库在 MySQL 模式租户下的扩展功能
  3. 清理回收站
  4. obshell recyclebin 命令组
  5. 清理旧集群
1 个赞