南大通用GBase 8a数据文件大小参数_gbase_segment_size

本文介绍GBase 8a的数据文件的大小参数_gbase_segment_size,默认该值为2G,用户可以在磁盘空间敏感时,调低该参数来释放更多的空间。

参考

GBase 8a集群删除数据后释放磁盘空间shrink space

参数

_gbase_segment_size

说明

使用范围:gnode

默认值:2G

该参数,每个数据文件的最大尺寸。注意GBase 8a是列存的,所以磁盘上是每个列,一组数据文件。超过该参数后,会通过后缀数字来表示,比如

其中C0000中的数字代表字段位置,0000表示第一个字段,该顺序和字段添加顺序一致,如果列删除了,不会被复用。

-rw------- 1 gbase gbase  33M Sep 29 15:55 C00000.seg
-rw------- 1 gbase gbase  17M Sep 29 15:51 C00000.seg.1
-rw------- 1 gbase gbase 8.2M Sep 29 15:52 C00000.seg.11
-rw------- 1 gbase gbase  11M Sep 29 15:55 C00000.seg.2
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.3
-rw------- 1 gbase gbase 1.4M Sep 29 15:55 C00000.seg.4
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.5
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.7
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.9

样例

数据生成方法

insert select 自己。数据值少许变动,避免重复数据被大范围压缩。

gbase> insert into t1 select id+1234 from t1;
Query OK, 11066250 rows affected (Elapsed: 00:00:06.65)
Records: 11066250  Duplicates: 0  Warnings: 0 Total: 22132500

gbase> insert into t1 select id+1234 from t1;
Query OK, 22132500 rows affected (Elapsed: 00:00:13.86)
Records: 22132500  Duplicates: 0  Warnings: 0 Total: 44265000

gbase> insert into t1 select id+1234 from t1;
Query OK, 44265000 rows affected (Elapsed: 00:00:26.48)
Records: 44265000  Duplicates: 0  Warnings: 0 Total: 88530000

gbase> insert into t1 select id+1234 from t1;
Query OK, 88530000 rows affected (Elapsed: 00:00:53.43)
Records: 88530000  Duplicates: 0  Warnings: 0 Total: 177060000

默认值2G

我们通过每次增加1倍的方式,来查看数据文件的变化,最终达到了17M和33M.

其中seg是最原始的第一个文件,如果有数据变动DML,则生成seg.1。下一次则返回用seg,循环往复,直到其中一个达到了参数值。这个是数据库内部的AB版本控制用的。

后面的例子会看到。

[gbase@rh6-1 t1]$ ll -h
total 9.0M
-rw------- 1 gbase gbase 4.9M Sep 29 15:48 C00000.seg
-rw------- 1 gbase gbase 4.1M Sep 29 15:48 C00000.seg.1
[gbase@rh6-1 t1]$ ll -h
total 9.6M
-rw------- 1 gbase gbase 5.5M Sep 29 15:48 C00000.seg
-rw------- 1 gbase gbase 4.1M Sep 29 15:48 C00000.seg.1
[gbase@rh6-1 t1]$ ll -h
total 9.6M
-rw------- 1 gbase gbase 5.5M Sep 29 15:48 C00000.seg
-rw------- 1 gbase gbase 4.1M Sep 29 15:48 C00000.seg.1
[gbase@rh6-1 t1]$ ll -h
total 9.6M
-rw------- 1 gbase gbase 5.5M Sep 29 15:48 C00000.seg
-rw------- 1 gbase gbase 4.1M Sep 29 15:48 C00000.seg.1
。。。。。
[gbase@rh6-1 t1]$ ll -h
total 49M
-rw------- 1 gbase gbase 33M Sep 29 15:50 C00000.seg
-rw------- 1 gbase gbase 17M Sep 29 15:48 C00000.seg.1
[gbase@rh6-1 t1]$ ll -h
total 49M
-rw------- 1 gbase gbase 33M Sep 29 15:50 C00000.seg
-rw------- 1 gbase gbase 17M Sep 29 15:48 C00000.seg.1

调整参数为10M

修改gnode的配置文件,修改或添加参数到如下部分

[gbased]
。。。。。
_gbase_segment_size=10M

重启服务后,查看参数生效

gbase> show variables like '%segment%';
+---------------------+----------+
| Variable_name       | Value    |
+---------------------+----------+
| _gbase_segment_size | 10485760 |
+---------------------+----------+
1 row in set (Elapsed: 00:00:00.00)

该参数后复制数据

gbase> insert into t1 select id+1234 from t1;
Query OK, 177060000 rows affected (Elapsed: 00:01:49.85)
Records: 177060000  Duplicates: 0  Warnings: 0 Total: 354120000

该参数后数据文件发生了变动

可以看到,数据文件变成了超过10M就重新生成一个新文件,且数字后缀是奇数 或者都是偶数。

[gbase@rh6-1 t1]$ ll -h
total 98M
-rw------- 1 gbase gbase  33M Sep 29 15:55 C00000.seg
-rw------- 1 gbase gbase  17M Sep 29 15:51 C00000.seg.1
-rw------- 1 gbase gbase 8.2M Sep 29 15:52 C00000.seg.11
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.3
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.5
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.7
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.9

该参数后再次复制


gbase> insert into t1 select id+1234 from t1;
Query OK, 354120000 rows affected (Elapsed: 00:03:46.19)
Records: 354120000  Duplicates: 0  Warnings: 0 Total: 708240000

数据文件结果

[gbase@rh6-1 t1]$ ll -h
total 193M
-rw------- 1 gbase gbase  33M Sep 29 15:55 C00000.seg
-rw------- 1 gbase gbase  17M Sep 29 15:51 C00000.seg.1
-rw------- 1 gbase gbase  11M Sep 29 15:57 C00000.seg.10
-rw------- 1 gbase gbase 8.2M Sep 29 15:52 C00000.seg.11
-rw------- 1 gbase gbase  11M Sep 29 15:57 C00000.seg.12
-rw------- 1 gbase gbase  11M Sep 29 15:58 C00000.seg.14
-rw------- 1 gbase gbase  11M Sep 29 15:58 C00000.seg.16
-rw------- 1 gbase gbase  11M Sep 29 15:59 C00000.seg.18
-rw------- 1 gbase gbase  11M Sep 29 15:55 C00000.seg.2
-rw------- 1 gbase gbase 6.3M Sep 29 15:59 C00000.seg.20
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.3
-rw------- 1 gbase gbase  11M Sep 29 15:56 C00000.seg.4
-rw------- 1 gbase gbase  11M Sep 29 15:51 C00000.seg.5
-rw------- 1 gbase gbase  11M Sep 29 15:56 C00000.seg.6
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.7
-rw------- 1 gbase gbase  11M Sep 29 15:57 C00000.seg.8
-rw------- 1 gbase gbase  11M Sep 29 15:52 C00000.seg.9

总结

小的数据文件参数,可以让shrink space更多的释放空间,但也会导致更多数量的数据文件,带来碎片问题。一般建议数据量不大,且磁盘空间敏感的,调小该参数。

另外,不同列,数据类型和分布不同,压缩比不同,所以同一张表,不同列的数据文件数量是不同的。 只有一个数据文件里的所有数据全部删除了,才会被shrink space释放空间。而且,最少要保留一个seg文件,不会全部删除,所以那些重复度极高,压缩比超高的列,很难释放空间。