全部產品
Search
文件中心

PolarDB:並行重新整理

更新時間:Jun 03, 2026

PolarDB MySQL版物化視圖的全量重新整理(Complete Refresh)和增量重新整理的首次重新整理,支援 ETL 並行寫入和 ePQ 並行寫入兩種模式,您可以根據寬窄表、叢集系列(叢集版/多主叢集)、是否需要計算卸載等情境特徵選取合適的並行寫入模式,以提升重新整理執行效率。

概述

PolarDB MySQL版物化視圖的全量重新整理(Complete Refresh)和增量重新整理的首次重新整理,支援以下兩種並行寫入模式來提高執行效率:

模式

開關

架構

適用情境

ETL 並行寫入(預設)

預設模式(並行度 > 1 時自動啟用)

查詢卸載到遠程節點執行,多 Worker 並行消費結果寫入。

寬表、巨量資料量、需要計算卸載。

ePQ 並行寫入

需手動切換

PQ 架構將INSERT SELECT拆分為多 Worker 並存執行,支援 MPP 卸載。

窄表、需要端到端並行。

兩種模式均要求 materialized_view_refresh_parallelism > 1 才生效。

適用範圍

版本

支援的並行重新整理模式

備忘

MySQL 8.0.1,核心小版本為8.0.1.1.54及以上版本

ETL 模式

僅支援 ETL-based 並行重新整理。

MySQL 8.0.2,核心小版本為8.0.2.2.34與8.0.2.2.35

ePQ 模式

  • 僅支援 ePQ 模式

  • 與分區 MDL 功能暫不相容,隱式分區開啟時 partition_level_mdl 必須關閉。

重新整理流程

物化視圖完全重新整理分為三個階段:

  1. 建立容器表:根據物化視圖定義建立新容器表。若materialized_view_implicit_partition_num > 1,自動添加 HASH 分區,消除並行寫入時的鎖競爭。

    說明

    MySQL 8.0.1版本暫不支援materialized_view_implicit_partition_num參數。

  2. 並行資料寫入:根據所選模式執行並行寫入。

  3. 構建列存索引(可選):若 materialized_view_add_columnar_index_after_insert = ON,先完成重新整理,然後再為容器表構建列存索引(IMCI)。

ETL 並行寫入模式

工作原理

  1. 根據卸載策略選擇遠程節點(列存索引唯讀節點或行存唯讀節點),建立串連。

  2. 將物化視圖的定義查詢發送到遠程節點執行。

  3. 遠程節點流式返回結果集(支援壓縮傳輸)。

  4. 主(RW)節點建立多個 Worker 線程,各 Worker 並行擷取行並寫入容器表各分區。

特性

  • 查詢計算在遠程節點完成,不佔用主(RW)節點CPU。

  • 寫入在主(RW)節點本地執行,保證事務一致性。

  • 寬表情境下並行效率不受行長影響。

  • 支援多主叢集(Limitless)

使用步驟

PolarDB叢集參數在控制台與會話中修改方式存在差異,詳細區別如下:

  • PolarDB控制台上修改

    • 相容性說明:部分叢集參數在PolarDB控制台上均已添加MySQL設定檔的相容性首碼loose_

    • 操作方法:找到並修改這些帶loose_首碼的參數。

  • 在資料庫會話中修改(使用命令列或用戶端):

    • 操作方法:當您串連到資料庫,使用SET命令修改參數時,請去掉loose_首碼,直接使用參數的原始名稱進行修改。

參數

樣本值

可否 SESSION 設定

說明

materialized_view_refresh_parallelism

16

設定並行度(大於1時,啟用並行重新整理)。

materialized_view_complete_refresh_offload_policy

FORCE_IMCI

手動重新整理時可按會話指定不同卸載策略。

上述參數配置完成後,執行重新整理:

-- 執行重新整理
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

ePQ 並行寫入模式

工作原理(MPP 卸載到遠程列存索引唯讀節點,卸載策略為FORCE_IMCI

  1. PQ Worker 被調度到遠程列存索引唯讀節點執行 SELECT 掃描。

  2. 掃描結果通過內部網路傳回主(RW)節點(支援壓縮)。

  3. 多個 PQ Worker 在主(RW)節點本地並行掃描源表資料。

  4. 掃描結果並行寫入容器表各分區。

  5. 主(RW)節點本地完成資料寫入。

特性

  • 端到端並行:掃描和寫入在同一個並存執行計劃中完成。

  • 窄表情境下近線性擴充。

  • 不受 ETL 單連接埠網路傳輸限制。

  • 多主叢集(Limitless)下暫不支援,自動回退到串列。

網路壓縮(MPP 卸載情境)

啟用條件(需同時滿足):

參數

樣本值

可否 SESSION 設定

說明

materialized_view_etl_compression_algorithm

ZSTD

需設定為ZSTD。指定在物化視圖重新整理過程中,從副本節點進行ETL(資料幫浦、轉換、載入)時的資料壓縮演算法。

  • UNCOMPRESSED(預設)

  • ZSTD

materialized_view_etl_compression_level

3

設定 ZSTD 壓縮層級。為ETL過程中的資料壓縮演算法設定壓縮層級。如果該值設定為0或無效值,系統將使用預設值(ZSTD為3)。

  • 取值範圍:0-22

  • 預設值:0

效果

  • 可降低 60%~80% 的節點間傳輸資料量。

  • 壓縮/解壓會增加 CPU 開銷,在 CPU 瓶頸情境下需權衡。

操作建議

壓縮傳輸僅推薦寬表情境使用。窄表情境下壓縮的 CPU 開銷可能抵消網路收益,建議保持 UNCOMPRESSED。若物化視圖為寬表且需要卸載執行,也可直接使用 ETL 模式替代 ePQ + MPP 卸載,ETL 模式天然適合寬表。

使用步驟

情境 A:MPP 卸載到遠程節點

參數

樣本值

可否 SESSION 設定

說明

materialized_view_refresh_parallelism

16

設定並行度(大於1時,啟用並行重新整理)。

materialized_view_implicit_partition_num

16

設定隱式分區數。

說明

MySQL 8.0.1版本暫不支援materialized_view_implicit_partition_num參數。

materialized_view_complete_refresh_offload_policy

FORCE_IMCI

手動重新整理時可按會話指定不同卸載策略。

pq_mpp_allow_imci_node

ON

允許卸載調度到列存索引唯讀節點。

materialized_view_etl_compression_algorithm

ZSTD

啟用壓縮傳輸(寬表推薦,窄表可跳過)。

materialized_view_etl_compression_level

3

設定壓縮傳輸的壓縮層級。

上述參數配置完成後,執行重新整理:

-- 執行重新整理
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

情境 B:指定 ePQ 卸載到特定列存索引唯讀節點

如果叢集中有多個列存索引唯讀節點,可使用 pq_mpp_allow_dispatch_to_imci_node 控制哪些列存索引唯讀節點允許接收 ePQ MPP 調度請求。該參數需要在主(RW)節點和目標列存索引唯讀節點上同時設定為 ON;未開啟的列存索引唯讀節點不會作為調度目標。

-- 1. 在主(RW)節點關閉 IMCI 作為 PQ Worker 資源的能力
-- 控制台配置 pq_mpp_allow_imci_node = OFF;

-- 2. 在主(RW)節點允許調度到 IMCI 節點
-- 控制台配置 pq_mpp_allow_dispatch_to_imci_node = ON;

-- 3. 串連到希望承接卸載查詢的 IMCI 節點,僅在該節點開啟調度入口
-- 控制台配置 pq_mpp_allow_dispatch_to_imci_node = ON;

-- 4. 回到主(RW)節點,使用 IMCI 卸載策略重新整理
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

開啟後,可通過 information_schema.cluster_group_resource_view 觀察目標節點狀態。目標列存索引唯讀節點應顯示為 allow_to_dispatchEXTRA 中包含 Allow to dispatch to IMCI node。該模式下列存索引唯讀節點只接收調度請求,不作為 PQ Worker 資源參與並存執行,如果希望所有列存索引唯讀節點都作為 ePQ Worker 資源參與執行,應使用 pq_mpp_allow_imci_node = ON

卸載目標節點選擇

當卸載策略非MASTER時,系統需要選擇一個遠程節點來執行 SELECT 查詢。

策略決定節點類型

materialized_view_complete_refresh_offload_policy

候選節點類型

無可用節點時的行為

PREFER_IMCI

列存索引唯讀節點

回退到主( RW)節點本地執行,輸出警告日誌。

FORCE_IMCI

列存索引唯讀節點

報錯失敗。

PREFER_TPRO

行存唯讀節點

回退到主( RW)節點本地執行,輸出警告日誌。

FORCE_TPRO

行存唯讀節點

報錯失敗。

COST

列存索引唯讀節點或行存唯讀節點(代價決定)

僅一種可用時選該類型,都不可用則回退主( RW)節點。

COST策略的代價決策

materialized_view_complete_refresh_offload_policy = COST 時,系統根據查詢的最佳化器代價與閾值比較來決定目標節點:

  • 查詢代價 ≥ cost_threshold_for_imci:卸載到列存索引唯讀節點(列存索引適合大代價的掃描與彙總查詢)。

  • 查詢代價 < cost_threshold_for_imci:卸載到行存唯讀節點(輕量查詢用行存唯讀節點即可)。

-- 設定代價閾值(預設 0,即所有查詢都傾向 IMCI)
SET SESSION cost_threshold_for_imci = 100000;

-- 使用代價策略
SET SESSION materialized_view_complete_refresh_offload_policy = COST;

多節點負載平衡

當同一類型有多個節點時,系統通過 Round-Robin 方式輪詢選擇節點:

  • 每次重新整理任務按全域計數器順序選取下一個節點。

  • 若選中的節點串連失敗,自動嘗試列表中的下一個節點,直到所有節點都嘗試過。

  • 不同的物化視圖重新整理任務會被均勻分布到各節點上。

對於ePQ + MPP卸載到列存索引(IMCI)的情境,可以有兩種方式:

  1. 開啟pq_mpp_allow_imci_node,支援卸載到全部的列存索引唯讀節點。

  2. 先關閉pq_mpp_allow_imci_node = OFF,然後通過 pq_mpp_allow_dispatch_to_imci_node 縮小候選列存索引唯讀節點範圍:

    • 在主(RW)節點設定 pq_mpp_allow_dispatch_to_imci_node = ON,允許主(RW)節點接受遠端列存索引唯讀節點的調度入口狀態。

    • 在希望承接卸載查詢的列存索引唯讀節點上設定 pq_mpp_allow_dispatch_to_imci_node = ON

    • 在不希望承接卸載查詢的列存索引唯讀節點上保持 pq_mpp_allow_dispatch_to_imci_node = OFF

推薦策略

生產環境建議使用 FORCE_IMCIFORCE_TPRO,避免使用 PREFER_* 策略。

原因: PREFER_*策略在目標節點不可用時會靜默回退到主( RW)節點本地執行,此時INSERT SELECT將在主( RW)節點上完成全量掃描和寫入,形成大事務,可能影響主( RW)節點的線上業務效能。

配置樣本

-- 推薦:強制使用 IMCI 節點,不可用時報錯而非回退
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;

-- 僅使用唯讀節點,不可用時報錯
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_TPRO;

-- 根據查詢代價自動選擇 IMCI 或 TPRO
SET SESSION materialized_view_complete_refresh_offload_policy = COST;
SET SESSION cost_threshold_for_imci = 50000;

參數範圍與設定方式

基本規則

  • GLOBAL 參數:僅能在控制台設定,對所有會話和自動重新整理線程統一生效。

  • SESSION 參數:可通過SET SESSION針對當前會話設定,也可通過控制台修改預設值,自動重新整理線程使用的GLOBAL預設值。

ETL 並行寫入模式的參數範圍

參數

範圍

可否 SESSION 設定

說明

materialized_view_refresh_parallelism

GLOBAL

否,必須 GLOBAL

所有重新整理任務共用同一併行度。

materialized_view_complete_refresh_offload_policy

SESSION

手動重新整理時可按會話指定不同卸載策略。

materialized_view_use_atomic_autoinc_for_refresh

SESSION

可按需關閉原子自增最佳化。

materialized_view_cache_etl_result

SESSION

可按需開啟結果集緩衝。

ePQ 並行寫入模式的參數範圍

參數

範圍

可否 SESSION 設定

說明

materialized_view_refresh_parallelism

GLOBAL

否,必須 GLOBAL

所有重新整理任務共用同一併行度。

pq_mpp_allow_imci_node

GLOBAL

否,必須 GLOBAL

MPP 調度到 IMCI 節點的全域開關。

pq_mpp_allow_dispatch_to_imci_node

GLOBAL

否,必須 GLOBAL

允許使用 IMCI 調度入口,主(RW)節點和目標列存索引唯讀節點均需開啟。

materialized_view_complete_refresh_offload_policy

SESSION

手動重新整理時可按會話指定卸載策略。

materialized_view_implicit_partition_num

SESSION

不同物化視圖可使用不同分區數。

materialized_view_etl_compression_algorithm

SESSION

MPP 卸載時的傳輸壓縮,自動傳播到 PQ Worker。

materialized_view_etl_compression_level

SESSION

壓縮層級,自動傳播到 PQ Worker。

說明事項

  • 若僅使用手動重新整理,SESSION參數可按會話靈活調整。

  • 若依賴自動重新整理,所有SESSION參數都需要通過控制台設定合理的預設值。

  • GLOBA參數無論哪種重新整理方式都必須在控制台設定,且修改後對所有後續任務立即生效。

  • SET SESSION在叢集重啟後失效,而GLOBA參數在控制台修改會保持持久化。

參數參考

核心參數

參數

範圍

範圍

預設值

說明

materialized_view_refresh_parallelism

GLOBAL

1~1024

1

並行 Worker 數,大於1時,啟用並行重新整理。

materialized_view_implicit_partition_num

SESSION

0~無上限

1

容器表隱式 HASH 分區數,大於1時啟用。

說明

MySQL 8.0.1版本暫不支援materialized_view_implicit_partition_num參數。

materialized_view_use_atomic_autoinc_for_refresh

SESSION

ON/OFF

ON

隱式分區列使用原子自增值(效能更優)。

計算卸載參數

參數

範圍

範圍

預設值

說明

materialized_view_complete_refresh_offload_policy

SESSION

卸載策略(materialized_view_complete_refresh_offload_policy參數)詳解

PREFER_IMCI

查詢卸載策略。

pq_mpp_allow_imci_node

GLOBAL

ON/OFF

OFF

允許將 PQ Worker 調度到列存索引唯讀節點(ePQ 模式需要)。

pq_mpp_allow_dispatch_to_imci_node

GLOBAL

ON/OFF

OFF

允許使用IMCI調度入口,主(RW)節點和目標列存索引唯讀節點均需開啟。

網路壓縮參數

參數

範圍

範圍

預設值

說明

materialized_view_etl_compression_algorithm

SESSION

  • UNCOMPRESSED

  • ZSTD

UNCOMPRESSED

PQ 內部通道壓縮演算法,僅ePQ MPP卸載模式使用。

materialized_view_etl_compression_level

SESSION

0~22

0

PQ 通道 ZSTD 壓縮層級(0=使用 ZSTD 預設層級 3)。

materialized_view_cache_etl_result

SESSION

ON/OFF

OFF

緩衝全部結果集到記憶體(僅 ETL 模式)。

壓縮生效方式:

模式

壓縮位置

生效條件

ePQ(MPP 卸載)

主(RW)節點 ↔ 遠程節點的 PQ 內部通道

materialized_view_etl_compression_algorithm = ZSTD

ePQ(純本地)

無網路傳輸

不適用

materialized_view_etl_compression_level 僅在 materialized_view_etl_compression_algorithm = ZSTD 時生效。設定為 0 時使用 ZSTD 預設層級 3,設定為 1~22 時使用指定層級,層級越高通常壓縮率越高,但 CPU 開銷也更大。

卸載策略(materialized_view_complete_refresh_offload_policy參數)詳解

行為

MASTER

不卸載,全部在主(RW)節點本地執行。

PREFER_TPRO

優先卸載到行存唯讀節點,不可用時回退到主(RW)節點。

PREFER_IMCI

優先卸載到列存索引唯讀節點,不可用時回退到主(RW)節點。

FORCE_TPRO

強制卸載到行存唯讀節點,不可用時報錯。

FORCE_IMCI

強制卸載到列存索引唯讀節點,不可用時報錯。

COST

基於代價模型自動選擇列存索引唯讀節點或行存唯讀節點。

模式選擇建議

情境

推薦模式

關鍵配置

窄表,無遠程節點

ePQ 純本地

materialized_view_complete_refresh_offload_policy=MASTER

窄表,有列存索引唯讀節點/行存唯讀節點

ETL/ePQ + MPP 卸載

materialized_view_complete_refresh_offload_policy=FORCE_IMCI

寬表或含大欄位

ETL

materialized_view_complete_refresh_offload_policy=FORCE_IMCI

多主叢集(Limitless

ETL

使用 ETL 模式(ePQ 在多主叢集環境下暫不可用)

注意事項

  • 並行度為 1 時不生效:兩種並行模式均退化為串列 INSERT SELECT。

  • 遠程節點可用性:ETL 模式及 ePQ MPP 卸載均依賴遠程節點。FORCE_*策略在節點不可用時報錯,PREFER_* 策略則回退到主(RW)節點本地執行。

  • 多主環境限制:ePQ 模式在多主叢集(Limitless)下自動禁用並回退到串列。如需並行重新整理請使用 ETL 模式。

  • IMCI 列覆蓋:ePQ + MPP 卸載到列存索引唯讀節點時,要求列存索引覆蓋物化視圖查詢中所有需要讀取的列,否則報錯。ETL 模式無此限制。

  • 隱式分區數:建議設為並行度的 1/2 ~ 2 倍。過少導致寫入競爭;過多增加檔案管理開銷。

  • 寫入位置:兩種模式的資料寫入始終在主(RW)節點本地完成。「卸載」僅影響 SELECT 查詢的執行位置。

  • 參數持久化SET SESSION在叢集重啟後失效,而GLOBA參數在控制台修改會保持持久化。

  • 壓縮與 CPU 權衡:ePQ MPP 卸載推薦使用 materialized_view_etl_compression_algorithm=ZSTD。窄表情境下壓縮的 CPU 開銷可能抵消網路收益。