AntDB3.1版本與2.2版本相比,性能上作了很大改善node
一、支持並行計算(繼承Postgres9.6新增並行功能);git
二、優化執行計劃,將計算儘可能下放到datanode上,而後在coordinator上彙總,而不是如2.2那樣,將數據上拉到coordinator上計算;github
三、支持datanode之間,datanode和coordinator之間數據reduce,當要查詢的數據分佈不平衡時,將數據reduce到一個節點上計算,最大限度提升查詢效率。sql
下面是和提升性能相關的重要參數。下面將舉例說明參數的使用。post
enable_cluster_plan性能
3.1與2.2相比,在性能上作了不少優化。打開此開關,會走3.1的執行計劃,會大幅提升性能。測試
下面的一樣的查詢語句在打開開關和關閉開關的狀況下,執行計劃不一樣,打開開關後,查詢時間大大縮短。優化
pgxc_enable_remote_query = offpostgresql
打開開關:繼承
關閉開關:
max_parallel_workers_per_gather
這個參數決定了每一個gather最多容許啓用多少個work process
max_worker_processes
這個參數決定了每一個節點在同一時間容許啓動多少個work process。
這兩個參數共同決定在datanode和coordinator上啓動多少個worker,worker數量決定
另外,執行計劃是在coordinator上生成的,建議在coordinator和datanode上參數設置同樣,不然,datanode上的最終值是兩者較小值。
下面舉例說明這兩個參數配置對執行計劃和效率的影響。
postgres=# create table aa(a1 int, a2 int);
CREATE TABLE
postgres=# copy aa from '/home/mass/data/big_ranint_int_10million.sql' with delimiter as ',';
COPY 10000000
postgres=# analyze aa;
ANALYZE
postgres=# explain(verbose, analyze) select count(*) from aa;
下面開始經過設置參數來控制worker的數量,來測試查詢效率隨worker和datanode數量的關係。
max_parallel_workers_per_gather =2
max_worker_processes = 3
最終啓動2個worker
2個datanode:
3個datanode:
4個datanode:
max_parallel_workers_per_gather =4
max_worker_processes = 3
最終啓動3個worker
2個datanode:
3個datanode:
4個datanode:
max_parallel_workers_per_gather =4
max_worker_processes =4
最終啓動4個workers
2個datanode:
3個datanode:
4個datanode:
從下圖可見,隨着datanode的增長,worker數的增長,查詢時間愈來愈少
參考:
QQ交流羣:496464280
源碼地址:http://github.com/ADBSQL
歡迎廣大postgresql愛好者使用和交流。