测试环境跑了一段时间,发现磁盘占用越来越大,不知道怎么清理。想问:
- 查看各租户、表空间占用的实用命令是什么?
- 测试环境可以安全删除哪些文件 / 数据释放空间?
- 避免磁盘爆满的日常小习惯有哪些?求一套新手也能看懂的空间管理简单教程。
测试环境跑了一段时间,发现磁盘占用越来越大,不知道怎么清理。想问:
通过系统视图 GV$OB_SERVERS 查看当前 OBServer 已经分配和使用的数据磁盘空间大小
针对您的问题,以下是关于OceanBase数据库中查看和清理存储空间的几个实用命令及相关建议:
查看租户下的所有表占用的磁盘大小
可以使用以下 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。
查看表宏块利用率
用于了解特定租户的表宏块利用率,这有助于识别是否存在大量的未充分利用的块:
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。
清理回收站中的数据
当频繁删除数据库对象并重建时,会在回收站中累积大量数据。可以通过PURGE命令清理这些数据:
obclient> PURGE TABLE object_name;
或者清空整个回收站:
obclient> PURGE RECYCLEBIN;
清理过期备份
查看并管理已设置的清理策略,确保不必要的备份文件得到清理:
obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_DELETE_POLICY;
清理无用的Docker容器、镜像和卷
如果您使用Docker容器环境,可以定期清理无用的容器、镜像和卷来释放空间:
docker container prune
docker image prune
docker volume prune
log_disk_utilization_threshold 和 log_disk_utilization_limit_threshold 参数可以帮助控制clog盘的空间使用,避免其占用过高导致写入失败。希望这套简单的空间管理教程对您有所帮助!
更多信息请查看:
可以打开归档,并开启自动清理吧
感谢解答ID问题!对于TABLE场景,我的经验是重点关注loc配置。
文中对ID的分析很到位,补充一点:结合TABLE和loc可以获得更好的效果。
还是看官方文档吧,这块内容一两句真说不全