sstable数据文件出乎意料的巨大

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】4.0.0
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【问题现象及影响】

【附件】

刚安装完的测试环境,导入几个tpch表数据(文本文件也才1.1G):

ls -lh xx
-rw-r--r--. 1 root root  24M Nov  2 16:46 /data/tpch/data/customer.tbl
-rw-r--r--. 1 root root 725M Nov  2 16:46 /data/tpch/data/lineitem.tbl
-rw-r--r--. 1 root root 2.2K Nov  2 16:46 /data/tpch/data/nation.tbl
-rw-r--r--. 1 root root 164M Nov  2 16:46 /data/tpch/data/orders.tbl
-rw-r--r--. 1 root root 114M Nov  2 16:46 /data/tpch/data/partsupp.tbl
-rw-r--r--. 1 root root  24M Nov  2 16:46 /data/tpch/data/part.tbl
-rw-r--r--. 1 root root  389 Nov  3 14:23 /data/tpch/data/region.tbl
-rw-r--r--. 1 root root 1.4M Nov  2 16:46 /data/tpch/data/supplier.tbl

查看元数据信息(也不过0.9G):

obclient [oceanbase]> select sum(size)/1024/1024/1024.0 from GV$OB_SSTABLES;
+----------------------------+
| sum(size)/1024/1024/1024.0 |
+----------------------------+
|             0.978388764895 |
+----------------------------+

但是发现 ssttable/block_file 文件巨大无比:

[root@wldb1 oceanbase]# ll store/sstable/
total 164626480
-rw-r--r--. 1 root root 168577466368 Nov  3 17:10 block_file

参考文档: 体验并行导入 & 数据压缩-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

主动触发对数据库进行合并:

obclient [oceanbase]> ALTER SYSTEM MAJOR FREEZE;
Query OK, 0 rows affected (0.011 sec)

# P.S,参照文档,下面这个查询结果是空的
obclient [oceanbase]> select name,info from __all_zone where zone='' and name = 'merge_status';
Empty set (0.002 sec)

obclient [oceanbase]> select * from __all_zone;
+----------------------------+----------------------------+-------+------------------------+------------------+------------+
| gmt_create                 | gmt_modified               | zone  | name                   | value            | info       |
+----------------------------+----------------------------+-------+------------------------+------------------+------------+
| 2022-11-02 21:56:34.558652 | 2022-11-02 21:56:34.558652 |       | cluster                |                0 | obcluster  |
| 2022-11-02 21:56:34.560530 | 2022-11-02 21:56:46.159628 |       | config_version         | 1667397406155412 |            |
| 2022-11-02 21:56:34.560530 | 2022-11-02 21:56:46.159628 |       | lease_info_version     | 1667397406159518 |            |
| 2022-11-02 21:56:34.560530 | 2022-11-02 21:56:34.560530 |       | privilege_version      |                0 |            |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 |       | storage_format_version |                4 |            |
| 2022-11-02 21:56:34.560530 | 2022-11-02 21:56:34.560530 |       | time_zone_info_version |                0 |            |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 | zone1 | idc                    |                0 |            |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 | zone1 | recovery_status        |                0 | NORMAL     |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 | zone1 | region                 |                0 | sys_region |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 | zone1 | status                 |                2 | ACTIVE     |
| 2022-11-02 21:56:34.562719 | 2022-11-02 21:56:34.562719 | zone1 | storage_type           |                0 | LOCAL      |
| 2022-11-02 21:56:34.561617 | 2022-11-02 21:56:34.561617 | zone1 | zone_type              |                0 | ReadWrite  |
+----------------------------+----------------------------+-------+------------------------+------------------+------------+

之后再次查看,文件大小几乎没发生变化。

block_file是预分配的;OB在部署是就会根据datafile_size的配置申请空间;就是你看到的block_file的大小;

简单理解,就是你部署的时候,指定了一个ob使用数据文件的最大值或者比例,ob启动后就一次写了一个block_file,这个文件大小就是指定的最大值或者比例计算后的最大值。后续使用都是从这里分配出去。
霸道占用模式

我在初始化部署时,设定的是 datafile_size: 5G ,这样也会直接预分配150多G吗

datafile_disk_percentage

更新时间:2022-10-31 11:32:24

编辑

分享

datafile_disk_percentage 表示占用 data_dir 所在磁盘( data_dir 所在磁盘将被 OceanBase 数据库系统初始化用于存储数据)总空间的百分比。

属性 描述
参数类型 整型
默认值 90
取值范围 [5,99]
是否重启 OBServer 生效

说明

该配置项与 datafile_size 同时配置时,以 datafile_size 设置的值为准。有关 datafile_size 的详细介绍,请参见 datafile_size

datafile_disk_percentage: 20 # The percentage of the data_dir space to the total disk space. This value takes effect only when datafile_size is 0. The default value is 90.

yaml文件中这么写的。
理解过来,不是说只有当 datafile_size 设置为0的时候才有效吗?