색인 검색 쿼리 계획에 캐시 인식 비용 사용 설정

이 페이지에서는 색인 스캔 중 캐시 인식에 대해 설명합니다. 사용 설정하면 PostgreSQL용 AlloyDB 쿼리 플래너는 실행이 시작될 때 공유 버퍼에서 이미 사용할 수 있는 색인 및 테이블 페이지 수를 기반으로 색인 검색의 예상 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보다 훨씬 낮습니다.