pg12自动创建表分区
总体思路
按月增加分区,通过pg_cron来每月调度。
pg_cron
参考:https://help.aliyun.com/document_detail/150355.html?spm=a2c4g.11186623.6.1080.6b31157f7509OO
-- 每个月的4号执行指定脚本。
SELECT cron.schedule('* * 4 * *', 'select 1;');
1、常用操作
查看分区树
SELECT * FROM pg_partition_tree('tbl_log');
2、parallel partition table wise join
并行分区表智能JOIN(类似MPP)
当两个JOIN的分区表JOIN字段类型一致,并且分区在JOIN字段上,并且分区类型一致(枚举、LIST、范围、HASH),并且分区个数一致。满足这些条件时,PostgreSQL优化器会选择并行分区智能JOIN,子分区各自JOIN子分区。
引用德哥数据:
场景 | 数据量 | 关闭并行 | 开启并行 | 并行度 | 开启并行性能提升倍数 |
---|---|---|---|---|---|
parallel partition table wise agg | 10亿 | 191 秒 | 8 秒 | 24 | 23.9 倍 |
问题
1、为什么需要分区个数一致才能走wise join?
3、自动创建表分区
3.1、创建测试表
create table tbl_log
(
id serial,
create_time timestamp(0) without time zone,
remark char(1)
) PARTITION BY RANGE (create_time);
CREATE TABLE tbl_log_p201801 PARTITION OF tbl_log FOR VALUES FROM ('2018-01-01') TO ('2018-02-01');
CREATE TABLE tbl_log_p201802 PARTITION OF tbl_log FOR VALUES FROM ('2018-02-01') TO ('2018-03-01');
CREATE TABLE tbl_log_p201802 PARTITION OF tbl_log FOR VALUES FROM ('2018-03-01') TO ('2018-04-01');
CREATE TABLE tbl_log_default