PolarDB PostgreSQL版叢集支援建立/重新整理物化視圖的批量寫入。
前提條件
支援的PolarDB PostgreSQL版的版本如下:
PostgreSQL 14(核心小版本14.9.15.0及以上)
您可通過如下語句查看PolarDB PostgreSQL版的核心小版本的版本號碼:
PostgreSQL 14
select version();
背景資訊
物化視圖 (Materialized View)是一個包含查詢結果的資料庫物件。與普通的視圖不同,物化視圖不僅儲存視圖的定義,還儲存了建立物化視圖時的資料副本。當物化視圖的資料與視圖定義中的資料不一致時,可以進行物化視圖重新整理 (Refresh)保持物化視圖中的資料與視圖定義一致。物化視圖本質上是對視圖定義中的查詢做預計算,以便於在查詢時複用。
CREATE TABLE AS文法用於將一個查詢所對應的資料構建為一張新的表,其表結構與查詢的輸出資料行完全相同。
SELECT INTO文法用於建立一張新表,並將查詢所對應的資料寫入表中,而不是將查詢到的資料返回給用戶端。其表結構與查詢的輸出資料行完全相同。
原理介紹
對於物化視圖的建立(CREATE MATERIALIZED VIEW
)和重新整理(REFRESH MATERIALIZED VIEW
),以及CREATE TABLE AS
/SELECT INTO
文法,由於在資料庫層面需要完成的工作步驟十分相似,因此PostgreSQL核心使用同一套代碼邏輯來處理這幾種文法。核心執行過程中主要包含以下兩個步驟:
資料掃描:執行視圖定義或
CREATE TABLE AS
/SELECT INTO
文法中定義的查詢,掃描符合查詢條件的資料。資料寫入:將上一步中掃描到的資料寫入到一個新的物化視圖或表中。
PolarDB PostgreSQL版對資料寫入步驟引入了批量寫入的最佳化。當需要寫入的資料量較大時,不再每次掃描一個元組就立刻寫入表或物化視圖中,而是在記憶體中攢夠一定數量的元組後,一次性批量寫入表或物化視圖中,從而能夠減少記錄WAL日誌和查詢頁面空閑空間映射的開銷,降低對頁面的鎖定頻率,顯著縮短上述DDL的執行時間。
使用說明
將參數polar_enable_create_table_as_bulk_insert
設定為ON
即可啟用該功能,預設值為ON
。
SET polar_enable_create_table_as_bulk_insert TO ON;