partition優(yōu)缺點:
優(yōu)點:
(1)數(shù)據(jù)維護成本降低蚕断。比如:某一部分數(shù)據(jù)需要失效,可以直接接觸綁定關(guān)系爆存,接觸綁定的數(shù)據(jù)和分區(qū)表都依然保留跋涣,需要時可以隨時恢復。
(2)一個表只能放在一個物理空間上搔弄,使用分區(qū)表之后可以將不同的表放置在不同的物理空間上。
(3)直接從分區(qū)表查詢數(shù)據(jù)比從一個大而全的全量數(shù)據(jù)表中讀取數(shù)據(jù)效率更高丰滑。
缺點:
(1)通過分區(qū)表的父表查數(shù)據(jù)相對于普通的數(shù)據(jù)全量表查詢效率要低顾犹。直接分區(qū)表中查詢數(shù)據(jù)比在全量表中查詢數(shù)據(jù)效率要高。
(2)主鍵有可能重復褒墨。由于分區(qū)表的的主鍵約束都是分別建立的炫刷,因此可能存在主鍵重復。
使用場景:
(1)如果歷史數(shù)據(jù)查詢機率較低郁妈,將歷史數(shù)據(jù)放置在單獨數(shù)據(jù)表中浑玛,增量數(shù)據(jù)放置在分區(qū)表中,程序直接查詢分區(qū)表能夠帶來更好的查詢效率噩咪。
pg_pathman與partition對比
pg_pathman
支持HASH和RANGE分區(qū)
支持自動和手動的分區(qū)維護
提供在線分區(qū)實施(在線重定義)顾彰,父表數(shù)據(jù)遷移到子表,拆分胃碾, 合并分區(qū)
不足:
不支持二級分區(qū)
權(quán)限涨享,索引,trigger等無法繼承
修改主鍵默認的seq需要重建分區(qū)仆百。
partition
支持hash厕隧,range,list分區(qū)
支持多字段組合分區(qū)儒旬,支持表達式分區(qū)
支持創(chuàng)建主鍵栏账,外鍵,索引栈源,分區(qū)表自動繼承
支持update分區(qū)鍵
支持分區(qū)表DETACH,ATTACH竖般,
支持二級分區(qū)
不足:
分區(qū)表不可以作為其他表的外鍵主表
pg_pathman安裝部署 pg_pathman-1.5.11.zip
容器內(nèi)執(zhí)行如下代碼:
apt-get update
apt-get -y install unzip
apt-get -y install gcc automake autoconf libtool make
apt-get install -y libpq-dev
find / -name pg_config
export PATH=/usr/bin:$PATH
apt-get install -y postgresql-server-dev-12
unzip pg_pathman-1.5.11.zip
cd pg_pathman-1.5.11
make USE_PGXS=1
make USE_PGXS=1 install
pg_pathman配置
/var/lib/postgresql/data/postgresql.conf
shared_preload_libraries = 'pg_pathman'
重啟數(shù)據(jù)庫
進入數(shù)據(jù)庫甚垦,導入插件pg_pathman
create extension pg_pathman;
select extname, extowner from pg_extension;
到此 pg_pathman 安裝完成。
pg_pathman分區(qū)表實施
表必需滿足
- 字段 created_time not null
- 無外鍵約束
分表 false 表示禁止數(shù)據(jù)移動
create extension pg_pathman;
select create_range_partitions('be_user_record'::regclass,'record_time','2018-01-01 00:00:00'::timestamp,interval '1 month', null,false);
查看分區(qū)表
select * from pathman_partition_list
并行遷移數(shù)據(jù)
select partition_table_concurrently('be_user_record'::regclass,10000,1.0);
查看遷移狀態(tài)
select * from pathman_concurrent_part_tasks ;
禁主表
select set_enable_parent('be_user_record'::regclass,false);
partition分區(qū)表實施
CREATE TABLE public.be_user_record2 (
)PARTITION BY RANGE(record_time);
CREATE TABLE be_user_record2_history PARTITION OF be_user_record2 FOR VALUES FROM (MINVALUE) TO ('2018-12-01');
CREATE TABLE be_user_record2_201812 PARTITION OF be_user_record2 FOR VALUES FROM ('2018-12-01') TO ('2019-01-01');
CREATE TABLE be_user_record2_201901 PARTITION OF be_user_record2 FOR VALUES FROM ('2019-01-01') TO ('2019-02-01');
校驗
partition 分區(qū)前后,主表的索引增刪直接分區(qū)表艰亮,分區(qū)表可以獨立增刪索引闭翩。
SELECT * FROM pg_partition_tree('be_user_record2');
select * from pg_indexes where tablename='be_user_record2_201912';