Guía para decidir la caché de PostgreSQL
«Añadir una caché» describe varios cambios distintos. La caché de páginas de PostgreSQL, el SQL preparado, una caché de filas completas, una vista materializada y Redis evitan partes diferentes de una lectura. Elige según el trabajo que se repite en tu solicitud y después mide el recorrido completo con la guía de benchmarks.
Empieza por el trabajo que repites
| Necesidad | Primera opción | Qué cambia |
|---|---|---|
| Mantener calientes las páginas de tablas e índices | shared_buffers de PostgreSQL y la caché del sistema operativo |
Menos lecturas de almacenamiento; el SQL sigue ejecutándose |
| Enviar muchas veces la misma sentencia | Una sentencia preparada | Menos trabajo repetido de análisis y planificación; la ejecución sigue ocurriendo |
| Devolver filas completas por clave primaria | SQL mget de pg_local_cache |
Reutiliza cargas útiles de filas completas elegibles mediante una API explícita |
| Precalcular una unión o un agregado | Una vista materializada | Lee resultados persistidos; la actualización define la frescura |
| Compartir objetos de aplicación entre servicios | Una caché externa como Redis | Claves, TTL e invalidación gestionados por la aplicación |
Páginas y SQL preparado
shared_buffers contiene páginas de la base de datos, no resultados finales de SELECT. Una página caliente puede evitar E/S de almacenamiento, pero PostgreSQL aún planifica o ejecuta la consulta, comprueba la visibilidad y construye el resultado. Una sentencia preparada puede evitar trabajo repetido de análisis y parseo en una sesión. Aun así se ejecuta contra el estado actual de la base de datos, y su plan puede ser genérico o personalizado.
La comparación de cachés de filas muestra qué trabajo queda en cada recorrido.
Filas completas por clave primaria
pg_local_cache almacena cargas serializadas de filas completas bajo claves primarias completas en memoria compartida acotada de PostgreSQL. Se accede mediante local_cache.mget('public.items'::regclass, $1::bigint[]); un SELECT normal nunca la consulta. Las lecturas elegibles y limpias con READ COMMITTED pueden acertar, mientras que los modos de aislamiento más estrictos, las escrituras en la transacción, la recuperación, la ejecución paralela o las filas demasiado grandes usan PostgreSQL. Los mapeos de tablas no compatibles se rechazan al asociarlos. Es un recorrido de lectura específico, no una caché de resultados de consultas arbitrarias. Consulta la guía de consultas por lotes, el contrato técnico y las comprobaciones de transacciones.
Vistas y cachés externas
Las vistas materializadas de PostgreSQL conservan el resultado de una consulta en una relación y se actualizan bajo demanda. Son adecuadas para informes, agregados y uniones repetibles cuando una frecuencia de actualización es un límite de frescura aceptable. No sustituyen una caché de filas por clave.
Una caché externa como Redis sirve para objetos de aplicación compartidos por varios procesos o servicios. La aplicación es propietaria de las claves, la serialización, el TTL y la invalidación. Consulta la guía de caché aparte de Redis. El quickstart ejecuta pg_local_cache sobre public.items.
Actualizado .