AlloyDB para PostgreSQL usa la carga previa de índices para acelerar las consultas que leen un rango de filas a través de un índice de árbol B. La carga previa de índices está habilitada de forma predeterminada en las instancias de AlloyDB y AlloyDB Omni que ejecutan PostgreSQL 17 y versiones posteriores. No necesitas configurar ninguna marca, volver a compilar índices ni cambiar tu aplicación o consultas en SQL para beneficiarte de ella.
Cómo funciona la carga previa de índices
Cuando una consulta analiza un rango de valores a través de un índice, por ejemplo, un
predicado BETWEEN o una cláusula ORDER BY ... LIMIT en una columna
indexada, el análisis lee las páginas de índice y las páginas de la tabla a las que apuntan las entradas
del índice.
Esas páginas de tablas suelen estar dispersas en el almacenamiento. En PostgreSQL estándar,
el análisis lee estas páginas de una en una, por lo que, cuando las páginas aún no están en
la memoria, la consulta pasa la mayor parte del tiempo esperando la E/S de almacenamiento.
Con la carga previa de índices, AlloyDB busca antes de la ejecución del análisis tanto en el índice como en la tabla, y lee las páginas que el análisis está a punto de necesitar en paralelo. AlloyDB almacena en etapa intermedia las páginas recuperadas previamente en la caché de SSD local de la instancia, de modo que, cuando el análisis solicita una página, esta se entrega desde el almacenamiento local rápido en lugar del almacenamiento remoto. Las páginas recuperadas previamente se almacenan fuera de los búferes compartidos de PostgreSQL, por lo que la recuperación previa no reduce la caché de búfer disponible para otras sesiones.
La carga previa de índices incluye las siguientes protecciones para que no agregue sobrecarga a las consultas que no se pueden beneficiar de ella:
- La carga previa se detiene en el límite de una cláusula
LIMIT, por lo que el análisis no lee páginas más allá de las filas que devuelve la consulta. - Para las búsquedas de solo índice en índices de cobertura, AlloyDB recupera previamente solo las páginas de índice y no lee las páginas de tabla.
- Las consultas que devuelven una sola fila, como las búsquedas de clave primaria, no activan la carga previa.
Beneficios para las cargas de trabajo
La carga previa de índices es más útil cuando tu conjunto de trabajo es más grande que la memoria de la instancia y tus consultas leen muchas filas a través de un índice de árbol B. Los siguientes son ejemplos de consultas que se benefician:
- Consultas de rango en columnas numéricas, de fecha o de marca de tiempo indexadas, como informes durante un período.
- Consultas que devuelven muchas filas para una clave, como el historial de pedidos de un cliente.
- Uniones en las que el lado interno es un análisis de índice que devuelve muchas filas.
- Consultas analíticas que leen rangos grandes de tablas orientadas a filas.
Las consultas cuyos datos ya están en búferes compartidos y las búsquedas de una sola fila se ejecutan de la misma manera con o sin carga previa.
Carga previa en planes de ejecución
Para ver el efecto de la carga previa de índices en una consulta, ejecútala con
EXPLAIN (ANALYZE, BUFFERS). Las páginas que la carga previa carga en la caché de SSD local
aparecen como recuentos de ultra fast cache hit en los nodos de análisis de índice del
plan. Para obtener más información sobre cómo leer estos contadores, consulta
Obtén y analiza planes de ejecución.
¿Qué sigue?
- Obtén y analiza planes de ejecución
- Estrategias de indexación
- Descripción general del asesor de índices