Ative os custos com reconhecimento de cache para planos de consulta de análise de índice

Esta página documenta a deteção da cache durante as análises do índice. Quando ativado, o planeador de consultas do AlloyDB for PostgreSQL ajusta o custo de E/S estimado das análises de índice com base no número de páginas de índice e de tabelas já disponíveis no buffer partilhado quando a execução é iniciada. O plano de consulta final é selecionado com base nos custos do plano ajustados. Isto melhora o desempenho das consultas e reduz os custos da base de dados.

Depois de ativada, a funcionalidade de reconhecimento da cache funciona automaticamente e ajusta-se ao estado em constante mudança de atingir o buffer partilhado. Além disso, a deteção da cache pode funcionar em conjunto com outras práticas de otimização de consultas, como definir a estimativa de custos do planeador de consultas do AlloyDB para random_page_cost.

Ative a deteção da cache

Para ativar a deteção da cache para a sua instância do AlloyDB, defina a flag alloydb.enable_cache_aware_costing (Pré-visualização) como on. Além disso, pode definir a flag ao nível da sessão para afetar os planos de consulta que ocorrem na mesma sessão. Para obter informações sobre como definir a flag, consulte o artigo Configure as flags da base de dados de uma instância.

Cenário de exemplo

O seguinte exemplo de código mostra um plano de análise de índice executado com uma cache de buffer partilhada totalmente aquecida.

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

Durante esta execução, não houve leituras de E/S. Sem reconhecimento da cache, o planeador de consultas inclui o custo de E/S para o plano de consulta de análise do índice. Isto pode fazer com que o plano de consulta de análise do índice perca para um plano de consulta de análise sequencial.

O fragmento do código abaixo mostra o custo do plano de consulta ajustado quando a deteção da cache está ativada.

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))

O novo custo, 27.49, para o mesmo plano de consulta de análise de índice é muito inferior ao custo antigo, 3906.49.