針對索引掃描查詢計畫啟用快取感知費用

如要提高查詢效能並降低資料庫 I/O 費用,您可以在 AlloyDB for PostgreSQL 中啟用快取感知索引掃描成本計算功能。啟用快取感知索引掃描成本計算功能後,AlloyDB 查詢規劃工具會根據執行開始時,共用緩衝區中可用的索引和資料表頁面數量,調整索引掃描的預估 I/O 成本,並根據調整後的成本選取最終查詢計畫。

啟用快取感知功能後,系統會自動運作,並在共用緩衝區命中率變更時進行調整。快取感知功能也可以與其他查詢調整做法搭配使用,例如在 random_page_cost 中設定 AlloyDB 查詢規劃工具費用預估。

啟用快取感知

如要為 AlloyDB 執行個體啟用快取感知功能,請將 alloydb.enable_cache_aware_costing (預先發布版) 旗標設為 on。您也可以在工作階段層級設定旗標,影響同一工作階段中發生的查詢計畫。如要瞭解如何設定旗標,請參閱「設定執行個體的資料庫旗標」。

情境示例

下列程式碼範例顯示使用完全預熱的共用緩衝區快取執行的索引掃描計畫。

explain (analyze, verbose, buffers)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate  (cost=3908.93..3908.94 rows=1 width=8) (actual time=4.128..4.130 rows=1 loops=1)
   Output: count(d)
   Buffers: shared hit=926
   ->  Index Scan using idx1 on public.t1  (cost=0.43..3906.49 rows=975 width=2) (actual time=0.143..3.205 rows=919 loops=1)
         Output: a, b, c, d
         Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))
         Buffers: shared hit=926
   Execution Time: 4.353 ms

執行期間沒有 I/O 讀取作業。如果沒有快取感知功能,查詢計畫工具會將索引掃描查詢計畫的 I/O 費用納入考量。這可能導致索引掃描查詢計畫輸給依序掃描查詢計畫。

下列程式碼片段顯示啟用快取感知功能時,調整後的查詢計畫成本。

explain (verbose)
SELECT count(d) FROM t1 WHERE a = 10 AND b > 100 AND c > 100;
------------------ Aggregate  (cost=29.93..29.94 rows=1 width=8)
   Output: count(d)
   ->  Index Scan using idx1 on public.t1  (cost=0.43..27.49 rows=975 width=2)
         Output: a, b, c, d
         Index Cond: ((t1.a = 10) AND (t1.b > 100) AND (t1.c > 100))

相同索引掃描查詢計畫的新費用 27.49 遠低於舊費用 3906.49。