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

本頁面說明索引掃描期間的快取感知。啟用後,AlloyDB for PostgreSQL 查詢規劃工具會根據執行開始時共用緩衝區中已有的索引和資料表頁面數量,調整索引掃描的預估 I/O 成本。然後根據調整後的計畫費用選取最終查詢計畫。這樣做可提升查詢效能並降低資料庫成本。

啟用後,快取感知功能會自動運作,並根據共用緩衝區的狀態變化進行調整。此外,快取感知功能可與其他查詢調整做法搭配使用,例如將 AlloyDB 查詢規劃工具的費用估算值設為 random_page_cost

啟用快取感知功能

如要為 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