日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

最佳實踐

PolarDB PostgreSQL版(兼容Oracle)支持彈性跨機并行查詢 (elastic Parallel Query,簡稱ePQ),能夠高效支持輕量級的分析型查詢,滿足用戶日漸需要的HTAP能力。

簡介

當查詢使用ePQ特性時,PolarDB PostgreSQL版(兼容Oracle)將通過ePQ優化器,生成能夠被多個計算節點并行執行的執行計劃。ePQ的執行引擎將在多個計算節點上協調執行該計劃,同時利用多個節點的CPU、內存、I/O帶寬來掃描、計算數據。

您可以通過GUC參數動態調整參與ePQ并行執行的計算節點 (Scale Out),以及節點上的單機并行度 (Scale Up),從而實現Serverless彈性擴展。

注意事項

ePQ暫不支持Oracle語法兼容2.0版本

一鍵開啟ePQ功能

如果當前有張表t1,可以通過以下命令一鍵開啟ePQ功能。如輸出所示,如果計劃中出現PolarDB PX Optimizer,則說明ePQ已經生效。

SET polar_enable_px = 1;
EXPLAIN SELECT * FROM t1;
                                  QUERY PLAN
-------------------------------------------------------------------------------
 PX Coordinator 6:1  (slice1; segments: 6)  (cost=0.00..431.00 rows=1 width=8)
   ->  Partial Seq Scan on t1  (cost=0.00..431.00 rows=1 width=8)
 Optimizer: PolarDB PX Optimizer
(3 rows)

SELECT * FROM t1;

GUC參數說明

參數

說明

polar_enable_px

用于開啟或關閉ePQ功能。取值如下:

  • on:開啟ePQ功能。

  • off(默認):關閉ePQ功能。

說明

當參數開啟后,查詢將會優先進入ePQ優化器中,產生能夠被并行執行的計。此外,所有ePQ相關的GUC參數將會開始生效。

polar_px_nodes

用于指定參與ePQ的計算節點名稱。默認值為空,表示所有只讀節點都參與ePQ并行執行:

如果只想配置特定的只讀節點參與ePQ并行執行,可以通過以下方法獲取只讀節點的名稱:

=> CREATE EXTENSION polar_monitor;
CREATE EXTENSION

=> SELECT name,slot_name,type FROM polar_cluster_info WHERE type = 'Replica';
 name  | slot_name |  type
-------+-----------+---------
 node2 | replica1  | Replica
 node3 | replica2  | Replica
(2 rows)

然后將得到的節點名稱以逗號分隔,設置polar_px_nodes:

=> SET polar_px_nodes = 'node2,node3';
=> SHOW polar_px_nodes;
 polar_px_nodes
----------------
 node2,node3
(1 row)

polar_px_dop_per_node

用于設置當前會話中每個計算節點上參與ePQ并行執行的工作進程數。默認值為3。

說明

一般最佳實踐值是當前節點CPU核數的一半。如果當前節點的CPU負載較高,可以遞減該參數,直到CPU占用率不超過 80%。當查詢性能不佳時,也可以遞增該參數,但不要使CPU占用率超過80%,否則可能會拖慢系統的其它后臺進程。

polar_px_max_workers_number

用于設置每個計算節點上最多可以同時存在的ePQ工作進程數量。默認值為30。

說明

如果超出這個限制時,查詢將會出錯:

ERROR:  over px max workers, already xxx workers, max 30 workers

此時,可以增大該參數,以避免出現類似的報錯。如果該參數設置得過大,也有可能會使節點上的進程數量過多,增大了OOM的風險。

polar_px_wait_lock_timeout

用于設置ePQ進程阻塞其它進程的最大時間。默認值為1800000毫秒(半小時)。

ePQ進程通常是只讀查詢,會對進行查詢的表加共享鎖。而用戶的部分DDL需要對表加排他鎖,從而因鎖沖突而被ePQ進程阻塞,在阻塞到該參數所指定的毫秒數后,ePQ查詢將會被取消,為執行DDL的進程讓路。

由于ePQ通常被用于執行較為耗時的分析型查詢,因此statement_timeout參數需要根據情況設置為一個合理的響應時間,例如10800000毫秒(三小時)。如果使用默認值0(不限時),則執行ePQ查詢的數據庫連接可能會因為查詢用時較久而長時間無法被使用。

synchronous_commit

用于確保ePQ并行查詢的數據一致性。取值如下:

  • on:確保ePQ并行查詢的數據一致性。表示數據庫提交事務時需要等待WAL日志刷入存儲后才能返回成功。

  • off(默認):無法確保ePQ并行查詢的數據一致性。

最佳實踐

允許特定的表使用ePQ

如果只想針對特定表執行ePQ,可以開啟polar_px_enable_check_workers參數。同時對需要執行ePQ的表顯式設置px_workers選項。

ALTER TABLE t1 SET (px_workers = 1);
說明

px_workers的取值如下:

  • -1:禁止對該表使用ePQ并行執行。

  • 0:默認狀態,對該表忽略ePQ并行執行。

  • 1:允許對該表使用ePQ并行執行。

開啟ePQ功能

全局級別

在PolarDB控制臺上設置polar_enable_px參數on,即可全局啟用ePQ功能,無論是OLTP查詢還是OLAP查詢,都將默認使用ePQ。

使用如下示例查看執行計劃。如果計劃中出現PolarDB PX Optimizer,則說明ePQ已經生效:

=> EXPLAIN SELECT * FROM t1;
                                  QUERY PLAN
-------------------------------------------------------------------------------
 PX Coordinator 6:1  (slice1; segments: 6)  (cost=0.00..431.00 rows=1 width=8)
   ->  Partial Seq Scan on t1  (cost=0.00..431.00 rows=1 width=8)
 Optimizer: PolarDB PX Optimizer
(3 rows)

會話級別

在會話內設置polar_enable_px參數為ON,使當前會話內的所有查詢默認使用ePQ:

SET polar_enable_px = ON;

數據庫級別/用戶級別

在全局級別或會話級別啟用ePQ后,會話內的所有的查詢都會優先使用ePQ。從最佳實踐的角度來說,ePQ更適用于需要進行大量OLAP負載的長查詢,而不適用于OLTP短查詢。對于短查詢來說,ePQ在計算節點間的建立連接、數據交換、銷毀連接的開銷將會引發查詢性能的回退。

如果在業務設計上需要使用到ePQ,那么可以將業務中的分析型SQL提取出來,使用一個特定的數據庫來進行ePQ查詢:

ALTER DATABASE ap_database SET polar_enable_px = ON;

或使用某個特定的賬戶,專門用來執行分析型的SQL:

ALTER ROLE ap_role SET polar_enable_px = ON;

查詢級別

如果只想對一個會話內的某幾條特定查詢(例如,夜間報表業務)使用ePQ,可以借助pg_hint_plan插件,通過SQL Hint對特定查詢啟用ePQ。為使SQL Hint生效,需要確保pg_hint_plan插件已經被添加到GUC參數shared_preload_libraries中。

在查詢前添加/*+ PX() */表示對該查詢使用ePQ:

=> /*+ PX() */ EXPLAIN SELECT * FROM t1;
                                    QUERY PLAN
----------------------------------------------------------------------------------
 PX Coordinator 6:1  (slice1; segments: 6)  (cost=0.00..431.03 rows=1000 width=8)
   ->  Partial Seq Scan on t1  (cost=0.00..431.00 rows=167 width=8)
 Optimizer: PolarDB PX Optimizer
(3 rows)

在查詢前添加/*+ NoPX() */表示對該查詢不使用ePQ:

=> /*+ NoPX() */ EXPLAIN SELECT * FROM t1;
                      QUERY PLAN
------------------------------------------------------
 Seq Scan on t1  (cost=0.00..15.00 rows=1000 width=8)
(1 row)

在查詢前添加/*+ PX(N) */表示以N作為單節點并行度使用ePQ。例如,N取值為6

=> /*+ PX(6) */ EXPLAIN SELECT * FROM t1;
                                     QUERY PLAN
------------------------------------------------------------------------------------
 PX Coordinator 12:1  (slice1; segments: 12)  (cost=0.00..431.02 rows=1000 width=8)
   ->  Partial Seq Scan on t1  (cost=0.00..431.00 rows=84 width=8)
 Optimizer: PolarDB PX Optimizer
(3 rows)