暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8s和Oracle间隔分区对比

原创 南帝 2024-08-07
352


好的技术是需要共享的,informix数据库在2010年发版的11.7引进了间隔分区技术来实现分区的自动扩展。Oracle数据库在2017年发版的12.2同样引入了间隔分区技术来分区自动扩展。GBase8s继承于informix,自动分区这么好的东西也一并继承了。

所谓间隔分区,是指分区数据是基于一个间隔值,比如,一个分区是基于一个月,一年或几百万顾客的记录。数据表有一个最初的分区,它是基于一个range语句来定义的。当一条记录不能满足最初的分区时,数据库将会自动创建一个分区来存储这条记录,数据库表和索引都可以用这种策略来进行分区。

举例:

创建一张订单表,根据order_date自动分区,定义的分区间隔是1个月。

Oracle间隔分区语法:

create table order

(order_num number not null,

order_date date

)PARTITION BY RANGE (order_date) INTERVAL (NUMTODSINTERVAL(1, 'MONTH')) (

PARTITION p1 VALUES LESS THAN (TO_DATE('2024-02-01, 'YYYY-MM-DD'))

);

gbase8s间隔分区语法:

create table order

(order_num integer not null,

order_date date

)fragment by RANGE(order_date)

interval(NUMTOYMINTERVAL(1,'MONTH'))

partition p1 VALUES<'2024-02-01' in datadbs1;

两者异曲同工。

###############################################

重点说一下gbase8s的间隔分区技术:

1. 并发执行:

所有分区表放在一个数据空间中,在并行访问的时候磁盘IO可能会成为瓶颈,降低了并发度。可以定义多个数据空间存放分区表,增加表检索并行度。语法实现:store in (datadbs1, datadbs2, datadbs3, datadbs4) ;

2. 定义空值分区:

对于分区字段为空值的情况,如果不定义空值分区,在插入的时候会报错。通过VALUES IS NULL来定义空值分区。

create table order

(

order_num integer not null,

order_date datetime year to fraction(5)

)fragment by RANGE(order_date)

interval(NUMTOYMINTERVAL(1,'MONTH'))

store in (datadbs1,datadbs2,datadbs3)

partition p0 VALUES is null in datadbs1,

partition p1 VALUES<'2024-02-01' in datadbs1,

partition p2 VALUES<'2024-03-01' in datadbs2,

partition p3 values <'2024-04-01' in datadbs3;

3. 历史分区清除

3.1清除策略:

某些场景,为了控制生产环境分区表的大小,需要定期清理历史分区,将历史数据移除到备份库或清除。Gbase8s库提供了分区自动清除策略,三种实现方法:

1.根据分区数量的多少进行限制,比如超过100个分区,就会自动清除最早建立的分区。语法: ROLLING ( 100 FRAGMENTS )

2.根据分区表占用磁盘空间大小进行限制,比如分区表超过100G,就会自动清除最早建立的分区。语法:LIMIT TO 100000MiB DETACH ANY

3.上面两种策略都写上,有一个满足条件,就开始清理。

3.2清除方式:卸载还是删除

清除策略分两种:

1.DETACH,将历史分区从分区表中卸载下来,以单独的表存放;

2.DISCARD,将历史分区直接删除;

CREATE TABLE employee

(emp_id INTEGER, emp_name CHAR(64),

ssn CHAR(12), basepay FLOAT, varpay FLOAT,

dept_id SMALLINT, hire_date DATE)

FRAGMENT BY RANGE(emp_id)

INTERVAL(1000)

ROLLING ( 100 FRAGMENTS )

LIMIT TO 100000MiB DETACH

STORE IN (dbs1, dbs2, dbs3)

PARTITION p1 VALUES < 5000 IN dbs0,

PARTITION p2 VALUES < 10000 IN dbs0,

PARTITION p3 VALUES < 20000 IN dbs4;

3.3清除动作执行时间:

清除动作并不是满足条件后马上执行,而是有自己的定时计划,默认会在每天00:45执行清除。

当然如果磁盘空间紧张,也可以手动执行清除。执行清除函数:execute function syspurge(); 就可以马上开始清除动作。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论