OceanBase 查看与清理存储空间,常用命令有哪些?

测试环境跑了一段时间,发现磁盘占用越来越大,不知道怎么清理。想问:

  1. 查看各租户、表空间占用的实用命令是什么?
  2. 测试环境可以安全删除哪些文件 / 数据释放空间?
  3. 避免磁盘爆满的日常小习惯有哪些?求一套新手也能看懂的空间管理简单教程
3 个赞

OceanBase数据库文档 - OceanBase数据库下载安装和使用说明

1 个赞

通过系统视图 GV$OB_SERVERS 查看当前 OBServer 已经分配和使用的数据磁盘空间大小

2 个赞

@论坛小助手 回答下

1 个赞

针对您的问题,以下是关于OceanBase数据库中查看和清理存储空间的几个实用命令及相关建议:

查看各租户、表空间占用的实用命令

  1. 查看租户下的所有表占用的磁盘大小
    可以使用以下 SQL 语句来查询特定租户下所有表占用的磁盘大小:

    SELECT /*+ query_timeout(30000000) */ a.TENANT_ID, a.DATABASE_NAME,
    a.TABLE_NAME, a.TABLE_ID, 
    sum(case when b.nested_offset = 0 then IFNULL(b.data_block_count+b.index_block_count+b.linked_block_count, 0) * 2 * 
    1024 * 1024 else IFNULL(b.size, 0) end) /1024.0/1024/1024 as data_size_in_GB 
    FROM oceanbase.CDB_OB_TABLE_LOCATIONS a inner join oceanbase.__all_virtual_table_mgr b on a.svr_ip = b.svr_ip and a.svr_port=b.svr_port and a.tenant_id = b.tenant_id and a.LS_ID = b.LS_ID and a.TABLET_ID = b.TABLET_ID and a.role ='LEADER' and a.tenant_id = ${租户ID}
    and b.table_type >= 10 and b.size > 0 group by a.TABLE_ID;
    

    请将${租户ID}替换为您要查询的租户ID。

  2. 查看表宏块利用率
    用于了解特定租户的表宏块利用率,这有助于识别是否存在大量的未充分利用的块:

    SELECT loc.TENANT_ID,loc.DATABASE_NAME,loc.TABLE_NAME,loc.TABLE_ID,
    SUM(rep.DATA_SIZE) AS DATA_SIZE,
    SUM(rep.REQUIRED_SIZE) AS REQUIRED_SIZE,
    SUM(rep.DATA_SIZE) / NULLIF(SUM(rep.REQUIRED_SIZE), 0) AS SIZE_RATIO
    FROM oceanbase.CDB_OB_TABLE_LOCATIONS loc
    JOIN oceanbase.CDB_OB_TABLET_REPLICAS rep
    ON loc.TABLET_ID = rep.TABLET_ID
    WHERE loc.TABLE_TYPE = 'USER TABLE' and loc.TENANT_ID = ${租户ID}
    GROUP BY loc.DATABASE_NAME,loc.TABLE_NAME,loc.TABLE_ID;
    

    请将${租户ID}替换为您要查询的租户ID。

测试环境可以安全删除哪些文件/数据释放空间

  1. 清理回收站中的数据
    当频繁删除数据库对象并重建时,会在回收站中累积大量数据。可以通过PURGE命令清理这些数据:

    obclient> PURGE TABLE object_name;
    

    或者清空整个回收站:

    obclient> PURGE RECYCLEBIN;
    
  2. 清理过期备份
    查看并管理已设置的清理策略,确保不必要的备份文件得到清理:

    obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_POLICY;
    
  3. 清理无用的Docker容器、镜像和卷
    如果您使用Docker容器环境,可以定期清理无用的容器、镜像和卷来释放空间:

    docker container prune
    docker image prune
    docker volume prune
    

避免磁盘爆满的日常小习惯

  1. 定期监控磁盘使用情况
    通过上述命令定期检查各个租户和表的磁盘占用情况,及时发现异常增长。
  2. 合理设置参数
    • log_disk_utilization_thresholdlog_disk_utilization_limit_threshold 参数可以帮助控制clog盘的空间使用,避免其占用过高导致写入失败。
    • 建议定期检查并根据实际情况调整这些参数。
  3. 清理回收站
    定期清理回收站中的数据,减少不必要的存储开销。
  4. 管理备份策略
    设置合理的备份保留策略,避免长时间保存不必要的备份文件。
  5. 清理Docker资源
    如果使用Docker容器环境,定期清理无用的容器、镜像和卷,以释放磁盘空间。

希望这套简单的空间管理教程对您有所帮助!

更多信息请查看:

  1. 某租户下所有表占用磁盘大小
  2. oceanbase数据库运行过程中手动删除clog日志
  3. 回收站
  4. 查看租户或表占用的磁盘空间
  5. 自动清理过期备份
  6. 部署个人实验环境
2 个赞

可以打开归档,并开启自动清理吧

1 个赞

感谢解答ID问题!对于TABLE场景,我的经验是重点关注loc配置。

1 个赞

文中对ID的分析很到位,补充一点:结合TABLE和loc可以获得更好的效果。

1 个赞

还是看官方文档吧,这块内容一两句真说不全