关于OceanBase数据清理

请教一下,OceanBase我在对表进行drop操作或者TRUNCATE操作的时候,感觉数据没清干净,大概会有个500M左右脏数据。比如我一个表,原来以后3个G的存储空间,我执行drop或者TRUNCATE后,数据是删掉了的,但是磁盘空间还会有500M左右的占用,这个是为啥。我要怎么操作能将表占用的空间清理干净。

回收站

但是我看了,我没开启回收站呀,回收站里面也没数据。

没有合并吧。可以查看这个文档了解一下:Buffer 表
看看文档合并操作,做一次全量合并:合并操作

你的意思是drop完了要执行一次合并操作?

合并都有自动合并的,让你去执行合并操作是为了确认你的500M的磁盘占用是不是因为还没有合并导致的

另外提问最好带上OceanBase的版本号哦。

oceanbase 是抢占 磁盘空间的 。删除表数据局,根本看不到磁盘空间的释放吧 。

OB 的空间管理是自己管理,通过预分配文件系统上空间。不少数据库都有这个设计。如 ORACLE 的表空间设计。ORACLE 好歹表空间有自己的文件,OB 比较干脆简单,目前是一个节点有一个文件,节点上的租户的数据都在这个文件里。

从 SSD 磁盘 到文件系统 到数据库, 每一层都觉得自己比下一层更懂数据空间的使用,所以都实现了空间删除语义,但可能实际并不立即释放空间。 这也没啥问题。关注一下 OB 文件所在文件系统空间利用率以及 OB 数据文件内部空间利用率即可。特别是后者,使用率超过 80% 就压引起重视,要留意 数据文件内部剩余空间是否足够容纳最近 24小时变化的数据对应的基线数据组成的全量。 通常稳定的业务每天的变化数据量基本差不多,意外是临时的业务高峰(如双11)或者临时的大量全表更新等等。

有兴趣的可以看看 OB V2.2 空间分配分析 (qq.com),4.x 也差不多。