近日因爲系統運行時間太長,數據庫庫表中的數據也是愈來愈多,爲了縮短庫表的操做時間,因此對數據庫中的部分庫表進行分區的操做。node
經過研究,決定採用pg_pathman插件對庫表進行分區操做。pg_pathman安裝、配置特此記錄。git
PostgreSQL傳統的分區方法,使用約束來區分不一樣分區存放的數據(配置constraint_exclusion=partition),執行select/delete/update時執行計劃根據約束和查詢條件排除不須要查詢的分區表。github
調用COPY或插入數據時使用觸發器或規則,將數據插入對應的分區表。sql
傳統的作法,不管是查詢仍是插入,對性能的影響都較大。數據庫
pg_pathman與傳統的繼承分區表作法有一個不一樣的地方,分區的定義存放在一張元數據表中,表的信息會cache在內存中,同時使用HOOK來實現RELATION的替換,因此效率很是高。api
目前支持兩種分區模式,range和hash,其中range使用binary search查找對應的分區,hash使用hash search查找對應的分區。dom
1. 目前支持range , hash分區。ide
2. 支持自動分區管理(經過函數接口建立分區,自動將主表數據遷移到分區表),或手工分區管理(經過函數實現,將已有的表綁定到分區表,或者從分區表剝離)。函數
3. 支持的分區字段類型包括int, float, date, 以及其餘經常使用類型,包括自定義的domain。工具
4. 經過CUSTOM SCAN實現了有效的分區表JOIN, 子查詢過濾分區。
5. 使用RuntimeAppend & RuntimeMergeAppend custom plan nodes實現了動態分區選擇。
6. PartitionFilter HOOK,實現insert inplace, 代替傳統的insert trigger或insert rule。
7. 支持自動新增分區。 目前僅支持range分區表。
8. 支持copy from/to 直接讀取或寫入分區表,提升效率。
9. 支持分區字段的更新,須要添加觸發器,若是不須要更新分區字段,則不建議添加這個觸發器,會產生必定的性能影響。
10. 容許用戶自定義回調函數,在建立分區時會自動觸發。
回調函數的規則以下
$part_init_callback$(args JSONB) RETURNS VOID 傳入參數以下 /* RANGE-partitioned table abc (for exp: child abc_4) */ { "parent": "abc", "parttype": "2", "partition": "abc_4", "range_max": "401", "range_min": "301" } /* HASH-partitioned table abc (for exp: child abc_0) */ { "parent": "abc", "parttype": "1", "partition": "abc_0" }
11. 非堵塞式建立分區表,以及後臺自動將主表數據遷移到分區表,非堵塞式。
12. 支持FDW,經過配置參數pg_pathman.insert_into_fdw=(disabled | postgres | any_fdw)支持postgres_fdw或任意fdw
13. 支持GUC參數配置,注意因爲使用了HOOK,若是其餘插件也使用了相同的HOOK,須要將pg_pathman放在前面註冊,如pg_stat_statements。
以上內容摘自:https://yq.aliyun.com/articles/62314?spm=5176.8091938.0.0.tu4vhW
Pg_pathman使用了custom scan provider api,因此只支持PostgreSQL 9.5以及以上的版本。
本次pg_pathman安裝採用git的方式安裝,首先安裝git工具:
# yum install git
切換到admin用戶,並進入postgresql目錄:
從git克隆pg_pathman:
$ git clone https://github.com/postgrespro/pg_pathman
導入postgresql安裝的環境變量:
$ export PATH=/home/digoal/pgsql9.6:$PATH
$ cd pg_pathman
$ make USE_PGXS=1
$ make USE_PGXS=1 install
更改postgresql的配置文件
$ cd $PGDATA
$ vi postgresql.conf
#將shared_preload_libraries註釋取消,將下面變量賦值進去
shared_preload_libraries = 'pg_pathman,pg_stat_statements'
修改完成後,重啓數據庫服務
$ pg_ctl restart -m fast
啓動數據庫報錯
這是因爲未安裝pg_stat_statements模塊致使,pg_stat_statements模塊位於contrib包中,由於contrib包爲第三方工具包,雖然在postgresql數據庫的安裝包裏面已經自帶了contrib包,可是在安裝數據庫的時候並未主動安裝,所以須要咱們手動安裝一下。
進去以前解壓之後的postgresql數據庫安裝包的文件夾
$ cd /usr/local/postgresql-9.6.13
進入contrib文件夾,一次執行如下命令:
make
make install
執行成功之後,再次啓動數據庫服務
啓動成功
建立擴展
使用psql鏈接登陸數據庫
# create extension pg_pathman;
# create extension pg_stat_statements;
查看
# \dx
至此,pg_pathman安裝配置完成