AlloyDB for PostgreSQL 資料欄引擎會以資料欄導向格式,將所選資料欄儲存在記憶體中,加快掃描、彙整及匯總大量資料的 SQL 查詢速度。您可以在主要和讀取集區執行個體上使用這項功能,並讓自動分欄功能為您選擇資料欄。
資料欄引擎提供下列元件:
資料欄儲存庫,內含所選資料欄的資料表和 materialized view 資料,並依據資料欄導向格式重新編排。您也可以將常用運算式新增至資料欄儲存庫。
資料欄查詢規劃工具和執行引擎,可讓您在查詢使用資料欄儲存庫。
資料欄引擎可用於主要執行個體、讀取集區執行個體,或兩者皆可。在讀取集區執行個體啟用資料欄引擎後,您可以選擇啟用透明查詢轉送功能,自動將唯讀流量轉送至該執行個體。
您也可以使用自動分欄功能分析工作負載,並自動在資料欄儲存庫中填入可大幅提升效能的資料欄。
如要搭配特定查詢使用資料欄引擎,該查詢片段 (例如彙整和掃描) 中的所有資料欄都必須位於資料欄儲存庫中。
根據預設,資料欄引擎會使用 30% 的執行個體記憶體 (如果是 1 個 vCPU 的執行個體,則為 10%)。視工作負載、記憶體用量,以及是否設定讀取集區而定,您可以選擇減少主要執行個體的資料欄引擎記憶體配置,並為讀取集區執行個體分配更多記憶體。如要查看及監控資料欄引擎的記憶體用量,請參閱「查看資料欄儲存庫記憶體用量」。如要修改資料欄儲存庫使用的記憶體大小,請參閱「設定資料欄儲存庫的大小」。如要查看執行個體的建議資料欄引擎記憶體大小,請參閱「建議資料欄儲存庫記憶體大小」。
適合使用資料欄引擎的查詢類型
資料欄引擎可提升特定查詢的效能。以下列出最能受惠於資料欄引擎的作業和查詢模式:
資料表掃描
- 具有選擇性篩選器,例如
WHERE子句。 - 從較大的資料表或 materialized view 中,使用少數資料欄。
- 它會使用
LIKE、ILIKE、SUBSTR和TRIM等運算式。
- 具有選擇性篩選器,例如
匯總函式
- 他們只會使用下列運算式:
SUM、MIN、MAX、AVG和COUNT。 - 位於資料欄掃描查詢的開頭。
- 未分組或依資料欄分組。
- 他們只會使用下列運算式:
ORDER-BY和SORT:只有在ORDER-BY或SORT位於從資料欄引擎存取的資料欄掃描結果時,才會顯示。LIMIT:只有在運算子位於資料欄掃描查詢的開頭,且位於任何SORT或GROUP BY運算子之前時,才適用。只有在使用的索引鍵是資料欄,且未使用任何彙整限定詞時,才可使用
INNER HASH JOIN。選擇性彙整:僅限彙整位於資料欄掃描查詢的開頭。
使用 JSON 運算式篩選查詢。
如要進一步瞭解哪些查詢最適合搭配資料欄引擎、查詢是否使用資料欄引擎,以及使用方式,請參閱「使用 EXPLAIN 驗證資料欄引擎的使用情形」。
如何使用資料欄引擎
如要在 AlloyDB 執行個體中使用資料欄引擎,請執行下列高階步驟:
在執行個體上啟用引擎。
啟用引擎是一次性作業,需要重新啟動。
將資料欄新增至資料欄儲存庫。
如要將資料欄新增至資料欄儲存庫,請使用下列其中一種方法:
使用自動分欄功能,分析工作負載並自動新增資料欄。
根據您對執行個體中資料庫工作負載的瞭解,手動新增資料欄或將常用運算式新增至資料欄儲存庫 (預先發布版)。
您可以使用
g_columnar_relations檢視畫面追蹤資料欄儲存庫中的內容,並在新增資料欄後,使用EXPLAIN陳述式驗證 SQL 查詢中的資料欄引擎用量。
如需使用資料欄引擎的詳細操作說明,請參閱「設定資料欄引擎」。
可新增至資料欄儲存庫的資料
在資料欄儲存庫中新增資料欄時,可使用的資料類型和資料來源有一些限制。
支援的資料類型
即使資料表中的某些資料欄含有不支援的資料類型,資料欄引擎仍可填入及重新整理支援的資料欄。系統會在填入資料的過程中,略過不支援資料類型的資料欄。
執行查詢時,如果查詢中參照的所有特定資料欄都具有支援的資料類型,且存在於資料欄引擎中,資料欄引擎就會處理資料表。
在涉及多個資料表的查詢中 (例如 JOIN 作業),您可以單獨為任何資料表使用資料欄引擎。只要查詢中從特定資料表存取的所有資料欄都具有支援的資料類型,且位於資料欄引擎中,該資料表就能由資料欄引擎處理,即使 join 中的其他資料表含有不支援的資料欄也沒問題。
資料欄引擎僅支援具有下列內建資料類型的資料欄:
arraybigintbooleanbyteachardatedecimaldouble precisionenumfloat4float8integerjsonjsonbnumericrealserialshortsmallinttexttimestamptimestamptzuuidvarcharvector
如果嘗試手動將資料類型不受支援的資料欄新增至資料欄儲存庫,資料欄引擎會忽略這類嘗試。
不支援的資料來源
資料欄引擎不支援具有下列屬性的資料表或 materialized view 做為資料來源:
非葉分區資料表
外部資料表
資料欄引擎限制
- 如果對含有索引的資料欄執行分析查詢,AlloyDB 最佳化工具可能會選擇使用資料列儲存庫。
- 手動新增至資料欄儲存庫的資料欄不會自動移除。如要強制移除手動新增的資料欄,請在執行個體上使用
google_columnar_engine_drop()。 - 自動分欄功能可能會根據查詢用量,動態新增及移除資料欄。
- 資料欄引擎不支援部分資料類型。如要查看支援的資料類型,請參閱支援的資料類型。
頻繁更新資料列會導致資料欄資料失效。如要驗證資料欄儲存庫中的資料表或 materialized view,可以降低更新頻率,或排定更頻繁地重新整理資料欄引擎。
您可以比較 g_columnar_relations 中的
invalid_block_count和total_block_count欄,確認資料表或檢視表是否受到影響。如果資料表或檢視表經常或大量變更,invalid_block_count就會偏高。分區資料表無法直接填入資料欄引擎。如要使用資料欄引擎,必須個別填入資料表的每個葉分區。
如果資料表或檢視表的資料列數量較少 (通常少於 5,000 列),查詢規劃工具可能會選擇使用資料列儲存庫,而非資料欄儲存庫,以提升效能,即使資料已成功載入資料欄引擎也一樣。