Para mejorar el rendimiento de las consultas y reducir los costos de E/S de la base de datos, puedes habilitar el cálculo de costos de análisis de índices que tiene en cuenta la caché en AlloyDB para PostgreSQL. Cuando habilitas el cálculo de costos de análisis de índices con reconocimiento de caché, el planificador de consultas de AlloyDB ajusta el costo de E/S estimado de los análisis de índices en función de la cantidad de páginas de índice y tabla que están disponibles en el búfer compartido cuando comienza la ejecución, y selecciona el plan de consulta final en función de esos costos ajustados.
Después de habilitar el reconocimiento de caché, la función se ejecuta automáticamente y
se ajusta cuando cambian las tasas de aciertos del búfer compartido. El reconocimiento de la caché también puede funcionar con
otras prácticas de ajuste de consultas, como establecer la estimación de costos del planificador de consultas de AlloyDB
en
random_page_cost.
Habilita el reconocimiento de la caché
Para habilitar el reconocimiento de la caché en tu instancia de AlloyDB, establece la marca
alloydb.enable_cache_aware_costing
(versión preliminar) en
on. Además, puedes configurar la marca a nivel de sesión para que afecte los planes de consulta
que se producen en la misma sesión. Para obtener información sobre cómo configurar la marca, consulta
Configura las marcas de base de datos de una instancia.
Situación de ejemplo
En la siguiente muestra de código, se indica un plan de análisis de índice ejecutado con una caché de búfer compartido completamente preparada.
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 ejecución, no hubo lecturas de E/S. Sin el reconocimiento de la caché, el planificador de consultas incluye el costo de E/S para el plan de consulta de análisis de índices. Esto puede provocar que el plan de consulta de análisis de índice pierda frente a un plan de consulta de análisis secuencial.
En el siguiente fragmento de código, se muestra el costo ajustado del plan de consulta cuando se habilita el reconocimiento de la caché.
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))
El costo nuevo, 27.49, para el mismo plan de consulta de análisis de índice es mucho más bajo que el
costo anterior, 3906.49.