减少读写互锁方案分享--交换分区特性实例
【摘要】 在调度和查询混合的数据仓库的使用场景中,常常会有同时对一张表进行ETL写入,和业务进行查询的情况。这种情况下会导致调度和查询互锁,影响调度性能,拖慢整体调度时间;或者是查询语句被锁,只能等待调度完成再能读取。给业务带来很大的不便。这种情况下,如果目标表是分区表,可以使用分区表的交换分区的功能,减少锁等待。语法如下:具体实现方式简单理解为,调度将数据写入与目标表相同表结构的临时表中,数据写完之...
在调度和查询混合的数据仓库的使用场景中,常常会有同时对一张表进行ETL写入,和业务进行查询的情况。
这种情况下会导致调度和查询互锁,影响调度性能,拖慢整体调度时间;或者是查询语句被锁,只能等待调度完成再能读取。给业务带来很大的不便。
这种情况下,如果目标表是分区表,可以使用分区表的交换分区的功能,减少锁等待。
语法如下:
具体实现方式简单理解为,调度将数据写入与目标表相同表结构的临时表B中,数据写完之后,通过交换分区语。用临时表的数据置换目标表对应的分区。这种方案能只在交换分区的时候会加锁,在数据库底层其实是重新指定分区表的分区地址,速度特别快,对查询的业务影响能降到最低。
假设有一张分区表A,根据会计日期分为多个分区,即每个月的数据都放在同一个数据分区。
业务调度作业先将当月(2月)的数据写入临时表B中,此时分区表A可以进行DML操作。
B表数据插入完成之后,通过交换分区命令,即可实现B表的数据与A表中对应表分区做交换。
在交换分区的时候据库会对两张表的表元数据做校验,只有表结构,字段完全一致的场景下能交换。
CREATE TABLE public.tab_partition (
prod_key int, prod_code character varying(50)
)
WITH (orientation=column, compression=middle)
DISTRIBUTE BY HASH(prod_key)
PARTITION BY RANGE (prod_key)
( PARTITION p201901_r01 VALUES LESS THAN (100) TABLESPACE pg_default
, PARTITION p201901_r02 VALUES LESS THAN (200) TABLESPACE pg_default
, PARTITION p201901_r03 VALUES LESS THAN (300) TABLESPACE pg_default
)
CREATE TABLE public.tab_tmp (
prod_key int,
prod_code character varying(50)
)
WITH (orientation=column, compression=middle)
DISTRIBUTE BY HASH(prod_key);
alter table tab_partition exchange partition (p201901_r02) with table tab_tmp;
drop table tab_tmp
查看pg_attribute 可以发现列的最大标记是2
alter table public.tab_partition add column prod_col character varying(200);
alter table public.tab_partition drop column prod_col ;
可以发现drop 字段之后,仍会有对应的记录,只是改了列名的标识。
alter table public.tab_partition exchange partition (p201901_r02) with table public.tab_tmp;
所以A、B表 对字段没有执行同样的操作,在看数据库看来两张表的结构是有区别的,这个时候执行交换分区会报错。
ERROR: tables in ALTER TABLE EXCHANGE PARTITION must have the same number of columns
可以通过利用create table like including 的方式实现复制表结构,这样表元数据是一致的。能规避上边的问题。
create table tab_tmp2(like tab_partition INCLUDING DROPCOLUMNS INCLUDING DISTRIBUTION INCLUDING STORAGE INCLUDING RELOPTIONS);
alter table tab_partition exchange partition (p201901_r02) with table tab_tmp2;
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)