Uso de caché compartida de planes
Descripción general
Aurora PostgreSQL utiliza un modelo de proceso por usuario en el que cada conexión de cliente crea un proceso de backend dedicado. Cada proceso de backend mantiene su propia caché de plan local para las instrucciones preparadas. Dado que estas cachés no se pueden compartir entre procesos, las aplicaciones que utilizan muchas instrucciones preparadas pueden crear cachés duplicadas en diferentes procesos de backend, lo que provoca un aumento del uso de memoria.
Las versiones 17.6 y posteriores, y 16.10 y posteriores, de Aurora PostgreSQL introducen la funcionalidad de caché compartida de planes. Al habilitar esta característica, los procesos de backend pueden compartir planes genéricos, lo que reduce el uso de memoria y mejora el rendimiento al eliminar la generación de planes duplicados.
La caché compartida de planes utiliza los siguientes componentes como clave de caché:
Cadena de consulta (incluidos los comentarios)
Parámetros GUC relacionados con el planificador (incluido
search_path)ID de usuario
ID de base de datos
Los reinicios de la instancia restablecen la caché compartida.
Parameters
La siguiente tabla describe los parámetros que controlan la característica de caché compartida de planes:
| Parámetro | Descripción | Valor predeterminado | Permitido |
|---|---|---|---|
apg_shared_plan_cache.enable |
Activa o desactiva la caché compartida de planes. | 0 (desactivada) | 0, 1 |
apg_shared_plan_cache.max |
El número máximo de entradas de caché. | 200-1000 (dependiente del tamaño de la instancia) | 100–50000 |
apg_shared_plan_cache.min_size_per_entry |
El tamaño mínimo de plan que se debe almacenar en la caché compartida. Los planes más pequeños utilizan la caché local para optimizar el rendimiento de OLTP. | 16 KB | 0-32768 (KB) |
apg_shared_plan_cache.max_size_per_entry |
El tamaño máximo del plan para la caché compartida. Los planes más grandes solo almacenan información sobre el costo. | 256 KB-4 MB (dependiente del tamaño de la instancia) | 0-32768 (KB) |
apg_shared_plan_cache.idle_generic_plan_release_timeout |
El tiempo tras el cual las sesiones inactivas liberan los planes genéricos locales. Los valores más bajos ahorran memoria; los valores más altos pueden mejorar el rendimiento. | 10 segundos | 0-2147483647 (ms) |
nota
Puede modificar todos los parámetros sin necesidad de reiniciar.
Vistas y funciones de monitoreo
apg_shared_plan_cache(): muestra información detallada sobre las entradas de caché (accesos, validez, marcas de tiempo).apg_shared_plan_cache_stat(): muestra estadísticas a nivel de instancia (expulsiones, invalidaciones).apg_shared_plan_cache_reset(): elimina todas las entradas enapg_shared_plan_cache()yapg_shared_plan_cache_stat().apg_shared_plan_cache_remove(cache_key): elimina una entrada deapg_shared_plan_cache()cuando esta coincide concache_key.
Limitaciones
Solo funciona con instrucciones preparadas y no almacena en caché instrucciones PL/pgSQL.
No almacena en caché una consulta que contenga tablas temporales o tablas de catálogo.
No almacena en caché una consulta que dependa de RLS (seguridad de nivel de fila).
Cada réplica mantiene su propia caché (no se comparte entre réplicas).