本頁面概略說明 AlloyDB for PostgreSQL 提供的直欄引擎,並說明如何使用。
AlloyDB 資料欄引擎提供下列元件,可加快掃描、聯結和匯總的 SQL 查詢處理速度:
資料欄儲存區,內含所選資料欄的資料表和具體化檢視資料,並以資料欄導向格式重新整理。
資料欄查詢規劃工具和執行引擎,支援在查詢中使用資料欄儲存空間。
您可以在主要執行個體、讀取集區執行個體或兩者上使用直欄式引擎。 您也可以使用自動欄狀化功能分析工作負載,並自動在資料欄存放區中填入可提供最佳效能增益的資料欄。
如要搭配特定查詢使用直欄引擎,該查詢片段中的所有資料欄 (例如聯結和掃描) 都必須位於資料欄存放區中。
根據預設,直欄引擎會使用執行個體 30% 的記憶體。視工作負載、記憶體用量,以及是否已設定讀取集區而定,您可以選擇減少主要執行個體上的資料欄引擎記憶體配置,並將更多記憶體配置給讀取集區執行個體。如要查看及監控直欄引擎的記憶體用量,請參閱「查看直欄儲存空間記憶體用量」。如要修改資料欄商店使用的記憶體大小,請參閱「設定資料欄商店的大小」。如要找出執行個體適用的建議資料欄引擎記憶體大小,請參閱「建議資料欄存放區記憶體大小」。
可透過資料欄引擎提升效率的查詢類型
某些查詢可透過資料欄引擎提升效能。以下列出最適合使用資料欄引擎的作業和查詢模式:
表格掃描
- 這類篩選器具有選擇性,例如
WHERE
子句。 - 它會使用較大資料表或具體化檢視區塊中的少量資料欄。
- 使用
LIKE
、SUBSTR
或 `TRIM 等運算式。
- 這類篩選器具有選擇性,例如
匯總函式
- 只使用下列運算式:
SUM
、MIN
、MAX
、AVG
和COUNT
。 - 這些條件位於直欄掃描查詢的開頭。
- 未分組或按欄分組。
- 只使用下列運算式:
ORDER-BY
和SORT
:只有在從直欄引擎存取的資料欄掃描結果中,出現ORDER-BY
或SORT
時才會顯示。LIMIT
:只有在運算子位於資料行掃描查詢的開頭,且位於任何SORT
或GROUP BY
運算子之前時,才會套用。INNER HASH JOIN
只有在使用的鍵是資料欄,且未使用任何聯結限定詞時,才能使用。選擇性聯結:只有在聯結位於資料行掃描查詢的開頭時。
如要進一步瞭解哪些查詢最適合使用資料欄引擎、查詢是否使用資料欄引擎,以及使用方式,請參閱「使用 EXPLAIN
驗證資料欄引擎的使用情形」。
如何使用資料欄引擎
如要在 AlloyDB 執行個體中使用資料欄引擎,請執行下列高階步驟:
在執行個體上啟用引擎。
啟用引擎是一次性作業,需要重新啟動。
將資料欄新增至資料欄商店。
如要將資料欄新增至資料欄存放區,請使用下列其中一種方法:
您可以使用
g_columnar_relations
檢視畫面追蹤資料欄商店中的內容,並在新增資料欄後,使用EXPLAIN
陳述式驗證 SQL 查詢中資料欄引擎的使用情形。
如需有關如何使用資料欄引擎的詳細操作說明,請參閱「設定資料欄引擎」。
可新增至資料欄儲存空間的資料
將資料欄新增至資料欄存放區時,可使用的資料類型和資料來源會受到限制。
支援的資料類型
直欄引擎僅支援具有下列內建資料類型的直欄:
array
bigint
boolean
bytea
char
date
decimal
double precision
enum
float4
float8
integer
json
jsonb
numeric
real
serial
short
smallint
text
timestamp
timestamptz
uuid
varchar
vector
(預覽)
如果嘗試手動將含有不支援資料類型的資料欄新增至資料欄存放區,資料欄引擎會忽略這類要求。
不支援的資料來源
直欄引擎不支援以具有下列屬性的資料表或具體化檢視表做為資料來源:
非葉節點分區資料表
外部資料表
列數少於 5,000 列的資料表或檢視畫面
資料欄引擎限制
- 如果您對有索引的資料欄執行分析查詢,AlloyDB 最佳化工具可能會選擇使用資料列儲存區。
- 手動新增至資料欄商店的資料欄不會自動移除。如要強制移除手動新增的資料欄,請在執行個體上使用
google_columnar_engine_drop()
。 - 自動直欄化功能可能會根據查詢用量動態新增及移除直欄。
- 資料欄引擎不支援所有資料類型。如要查看支援的資料類型,請參閱「支援的資料類型」。
如果經常更新資料列,欄狀資料就會失效。如要驗證資料欄存放區中的資料表或具體化檢視區塊,您可以降低更新頻率,或排定更頻繁的資料欄引擎重新整理作業。
您可以比較
invalid_block_count
和total_block_count
欄中的 g_columnar_relations ,確認表格或檢視區塊是否受到影響。如果表格或檢視畫面經常或大量變更,invalid_block_count
就會很高。