oceanbase数据存储,压缩,合并的疑问

我在用 datax往oceanbase导入了6000W条数据,导完的时候看磁盘空间如下:

三个备份,每个40G的存储空间,但是导完的时候其中一个的可用空间只有0.27G;
我执行了转储和合并命令,如下:
ALTER SYSTEM MINOR FREEZE TENANT= myoadb;

ALTER SYSTEM MAJOR FREEZE TENANT = myoadb;
执行完成后OCP显示如下:


存储空间如下:

虽然磁盘有部分释放但是,三个备份的磁盘占用情况也不均衡;
又过了大概半个多小时,我再查询磁盘占用情况,现在如下:

这个时候磁盘占用情况好像均衡了,数据也压缩了。
针对以上情况我有如下疑问:
1、数据导入的时候三个备份的磁盘占用情况为什么会不一致;
2、执行转储和合并后为啥磁盘占用情况也不一致,并且数据压缩的也不是很多;
3、执行合并后过了半个多小时三个备份去磁盘占用情况均衡了,数据也压缩了,这个是有延时吗还是有什么逻辑?

1 个赞


另外还有个问题,我在查询表占用的空间的时候,表里面数据都是空的,这个是为什么?


另外还有个问题,我的数据盘是40G,我在查询数据库列表的时候这里怎么显示的45G?

对应的资源情况如下:

SELECT svr_ip,svr_port,total_size/1024/1024/1024 AS total, free_size/1024/1024/1024 AS free,(total_size-free_size)/1024/1024/1024 as used, used_size/total_size
FROM __all_virtual_disk_stat;
麻烦执行贴一下

左侧栏的资源管理看下。
当前可以已sql查到的为准。

image
我的意思是,我的数据导完了上图的三个备份数据有很大的差异,这个是为啥

统计信息的收集是在 合并时进行的。 是不是新表? 并且导入数据没多久。 如果手工合并后,能查询出数据不 ?? information_schema.tables的统计数据。

1,OB的磁盘已用大小计算方式是:已使用宏块*宏块大小,您出现三个zone的磁盘使用不同的原因在于ob内部在存储数据时,使用的宏块数量不同导致
2,转储和合并后,宏块会进行重写与重用,会出现各个zone数据不一致的情况,这个情况可能是由于触发内部表的数据更新非实时导致(理论上不会等太久)
3,与2相同,已用宏块的更新取决于某些行为触发了宏块的使用时才会更新(比如产生了磁盘临时表,数据写入、合并、坏块检测等),反映到内部视图不是实时,虽然有延迟,但是理论上延迟不会太久

总上所述,OB的已使用磁盘大小取决于内存存储的已使用宏块计数,该计数会随着某些行为变化,这些变化反应到内部视图上相对实时,不会延迟太大,从这个角度判断,您出现的情况,应该是当时OB记录的已使用宏块计数的真实反映,至于为何"OB记录的已使用宏块计数的真实反映"未按照预想的那样很快达到均衡,在OB内部实际情况可能会比较复杂,非异常情况

2 个赞

专业! 学习了

专业!OB的磁盘已用大小计算方式是:已使用宏块*宏块大小,您出现三个zone的磁盘使用不同的原因在于ob内部在存储数据时,使用的宏块数量不同导致。 这里是因为在导入的数据,副本之间的同步还需要时间,在导入的过程查询会存在涉及使用的宏块量不同导致那个时候看到的数据统计不一样?