跨機并行查詢功能還可以用于加速構建B-tree索引,同時支持加速創建B-Tree索引的GLOBAL索引。本文介紹工作原理以及如何使用該功能加速索引構建。
原理介紹
PolarDB PostgreSQL版(兼容Oracle)在執行索引構建時,會首先掃描待構建索引的基表構造出索引項,然后再進一步的根據索引項完成整棵索引樹的構建過程。
當使用跨機并行查詢功能加速Btree索引構建時,系統會自動構建出一個QC進程完成對基表項的并行掃描,并由索引構建進程接收QC進程掃描結果完成后續的索引創建邏輯。
注意事項
- 當前僅支持簡單場景,對普通列類型的索引構建過程,暫不支持CONCURRENTLY,INCLUDE等索引構建語法。
- 暫不支持表達式等索引列類型。
參數說明
如果需要使用跨機并行查詢功能加速創建索引,請使用如下參數:
參數 | 說明 |
---|---|
polar_px_enable_btbuild | 是否開啟使用跨機并行查詢加速創建索引。取值如下:
|
polar_px_dop_per_node | 指定通過跨機并行查詢加速構建索引的并行度。默認為1,推薦值8或者16。 該參數同時也指定了跨機并行查詢的并行度。詳細信息,請參見使用跨機并行查詢進行分析型查詢。 該參數可以指定數據庫角色進行開啟。 |
polar_px_enable_replay_wait | 當使用跨機并行查詢加速索引構建時,當前會話內無需再手動開啟polar_px_enable_replay_wait,該參數將自動生效,以便保證最近更新的數據表項可以被創建到索引中,保證索引表的完整性。索引創建完成后,該參數將會被重置為數據庫默認設置。 |
polar_bt_write_page_buffer_size | 指定索引構建過程中的寫IO策略。該參數默認值為0,不開啟,單位為塊,最大值可設置為8192。推薦設置為4096。
|
示例
示例背景:
執行如下命令,創建test表。
CREATE TABLE test(id int,id2 int);
查詢表結構:
\d test
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
id2 | integer | | |
執行如下步驟,對test表通過跨機并行查詢構建索引。
- 開啟使用跨機并行查詢加速創建索引功能。命令如下:
SET polar_px_enable_btbuild=on;
查看設置狀態:
SHOW polar_px_enable_btbuild;
返回結果如下:
polar_px_enable_btbuild ------------------------- on (1 row)
- 使用如下語法創建索引。
CREATE INDEX t ON test(id) WITH(px_build=on);
查詢表結構:
\d test Table "public.test" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- id | integer | | | id2 | integer | | | Indexes: "t" btree (id) WITH (px_build=finish)
構建完成后,該表的索引類型會帶有(px_build=finish)字段,說明該索引項是通過跨機并行查詢的方式構建的。
如果開啟polar_px_enable_btbuild,但創建索引的語法上未添加px_build選項,則會使用PolarDB PostgreSQL版(兼容Oracle)原生的索引創建方式構建索引。示例如下:
CREATE INDEX t ON test(id);
查詢表結構:
\d test
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
Indexes:
"t" btree (id)
性能數據
使用跨機并行查詢加速索引構建功能,對于大表創建索引時間,相較于原生PolarDB PostgreSQL版(兼容Oracle)的索引創建,可縮短近5倍。
如下是500GB數據表索引構建性能對比,橫坐標為構建的復合索引個數,縱坐標為索引構建時長(單位:ms)。
跨機并行查詢功能支持加速創建B-Tree索引的GLOBAL索引,如下是GLOBAL索引使用跨機并行查詢功能前后的性能對比圖(130GB數據量)。