有客户要求实现gbase 8s的表数据删除后,空间也能自动释放,可参考以下设置:
1、有索引是无法进行表属性修改的,先删除索引: drop index temp_table_idx;
2、8位设置表数据的自动清理片数,可灵活更改:ALTER FRAGMENT ON TABLE temp_table MODIFY INTERVAL ROLLING (8 FRAGMENTS) DETACH;
3、查询表结构验证结果:dbschema -d scadadb -t temp_table -ss
4、建索引(建索引加pdq:时间会快)
set pdqpriority 96;
create index temp_table_idx_new on temp_table (略) using btree in datadbs1;
5、可通过开启sysmaster,更改服务器时间进行验证(查看日志:onstat -m)。时间调到00:43,改完需要重启数据库才生效,45应该是程序自动执行分片的时间
参考廖神的资料,锐哥指导:

小知识点:
oncheck 命令的简介
oncheck 命令可以检查和打印数据对象(表和索引空间所在位置)。例如:
oncheck -cr 可以检查数据库保留页的正确性
oncheck -cD
oncheck -cI
oncheck -pe
oncheck -pP
oncheck -pT
使用如下命令将“数据表 employee 以及其上的索引”的磁盘使用情况输出到文件 pT.out 中:
oncheck -pT scadadb:analog_051> analog_051.out
**
参考廖神的文档:
GBase 8s数据库在语法上支持Round-Robin(轮询调度)、Expression-Based(基于表达式)、List(列表式)、Range(区间)四种分片方式。**
**
这里用到的是Range(区间)**
支持数值,date和datetime类似
包含范围分片(在 FRAGMENT BY 或 PARTITION BY 子句中显式定义的分片)和 间隔分片(数据库服务器在插入操作期间自动创建的分片)两种。
说明:
1)store in选项中的dbspace,是按round robin方式使用。若需要绑定相应的分片和dbspace,需要使用自定义返回dbspace名称的函数方式。
如:
create function mydbs
(
owner char(32), – 所有者
table char(255), – 表名
value datetime year to second, – 与分片键同一数据类型的分片值,或者可以隐式强制转型为那个数据类型的兼容类型
retry int – 重新尝试标记
) returns char(255)
if (mod(month(value),6) == 0)
then
return “datadbs1”;
elif (mod(month(value),6) == 1)
then
return “datadbs2”;
elif (mod(month(value),6) == 2)
then
return “datadbs3”;
elif (mod(month(value),6) == 3)
then
return “datadbs4”;
elif (mod(month(value),6) == 4)
then
return “datadbs5”;
else
return “datadbs6”;
end if;
end function;
注:4个输入参数名称均为指定的。
当我们插入记录时,比如今天的记录(2019-08-31),那么将会插入到datadbs3中(mod(8,6)==2)。
2)rolling 可选子句,指明保留的分片数量,当超过指定的分片数量时,进行detach(拆除)或者discard(销毁)操作
datech或者discard操作并非在达到指定分片数量时立即执行,而是通过sysadmin库的定时任务purge_tables在00:45开始执行。




