全部產品
Search
文件中心

PolarDB:使用跨機並行查詢加速索引建立

更新時間:Jul 06, 2024

跨機並行查詢功能還可以用於加速構建B-tree索引,同時支援加速建立B-Tree索引的GLOBAL索引。本文介紹工作原理以及如何使用該功能加速索引構建。

原理介紹

PolarDB PostgreSQL版(相容Oracle)在執行索引構建時,會首先掃描待構建索引的基表構造出索引項目,然後再進一步的根據索引項目完成整棵索引樹的構建過程。

當使用跨機並行查詢功能加速Btree索引構建時,系統會自動構建出一個QC進程完成對基表項的並行掃描,並由索引構建進程接收QC進程掃描結果完成後續的索引建立邏輯。

注意事項

  • 當前僅支援簡單情境,對普通列類型的索引構建過程,暫不支援CONCURRENTLY,INCLUDE等索引構建文法。
  • 暫不支援運算式等索引列類型。

參數說明

如果需要使用跨機並行查詢功能加速建立索引,請使用如下參數:

參數說明
polar_px_enable_btbuild是否開啟使用跨機並行查詢加速建立索引。取值如下:
  • off:不開啟(預設)
  • on:開啟
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。
  • 當該參數設定為不開啟時,在索引建立的過程中,對於索引頁滿寫盤的方式採用的是block-by-block進行單個塊寫盤。
  • 當該參數設定為開啟時,則會在核心中緩衝一個polar_bt_write_page_buffer_size大小的buffer,對於需要寫盤的索引頁,會通過該buffer進行IO合并再統一寫盤,避免了頻繁IO調度的效能開銷。該參數會額外再帶來20%的索引建立效能提升。

樣本

樣本背景:

執行如下命令,建立test表。

CREATE TABLE test(id int,id2 int);

查詢表結構:

\d test
               Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |
 id2    | integer |           |          |

執行如下步驟,對test表通過跨機並行查詢構建索引。

  1. 開啟使用跨機並行查詢加速建立索引功能。
    命令如下:
    SET polar_px_enable_btbuild=on;

    查看設定狀態:

    SHOW polar_px_enable_btbuild;

    返回結果如下:

      polar_px_enable_btbuild
    -------------------------
     on
    (1 row)
  2. 使用如下文法建立索引。
    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選項。

構建完成後,該表的索引類型會帶有(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倍。

跨機並行查詢功能支援加速建立B-Tree索引的GLOBAL索引,如下是GLOBAL索引使用跨機並行查詢功能前後的效能對比圖(130GB資料量)。

構建效能對比圖