Descripción de la memoria compartida de PostgreSQL
PostgreSQL usa memoria que se puede clasificar como:
- Memoria local: asignada a cada proceso
- Memoria compartida: usada por todos los procesos
Memoria local
Cada proceso de PostgreSQL requiere memoria para el procesamiento de consultas. Los parámetros de servidor siguientes permiten definir el uso de la memoria:
work_mem define la memoria necesaria para ordenar tuplas para las operaciones ORDER BY y DISTINCT. Este parámetro determina la cantidad de memoria disponible para las operaciones de ordenación internas y las tablas hash. Si tiene una gran cantidad de memoria disponible y la carga de trabajo tiene consultas con ordenación compleja, aumentar este valor de parámetro podría mejorar el rendimiento al permitir exámenes más grandes en memoria antes de desbordarse en el disco.
Sin embargo, una consulta compleja podría tener muchas operaciones de ordenación y hash que se ejecutan simultáneamente. Cada operación usa tanta memoria como este valor permite antes de empezar a escribir en archivos temporales basados en disco. En un sistema ocupado, por lo tanto, el uso total de memoria es muchas veces el de un parámetro work_mem individual.
Para ajustar este valor, utilice RAM total * 0,25 / max_connections como valor inicial.
maintenance_work_mem es la memoria que requieren vacuum y reindex. Este parámetro determina la cantidad de memoria disponible para las operaciones de ordenación internas y las tablas hash. El valor predeterminado es de 64 KB, pero aumentar este valor mejora el rendimiento para el vacío.
autovacuum_work_mem establece la memoria máxima que va a usar cada proceso de vaciado automático.
temp_buffers define la memoria para almacenar tablas temporales. Este parámetro establece el número máximo de búferes temporales que usa cada sesión de base de datos.
effective_cache_size define la cantidad de memoria disponible para el almacenamiento en caché de disco por parte del sistema operativo y dentro de la base de datos. El planificador de consultas de PostgreSQL determina si esta memoria se ha corregido en RAM. Los exámenes de índice se suelen usar con valores más altos. Si el valor es bajo, se usan exámenes secuenciales.
Establezca effective_cache_size en el 50 % de la RAM total de la máquina.
Memoria compartida
La memoria compartida se asigna al inicio. La memoria compartida se usa para:
shared_buffers define los búferes de la memoria compartida que utiliza el servidor. PostgreSQL carga páginas de tablas e índices de almacenamiento persistente en un grupo de búferes compartidos y, a continuación, trabaja en ellas en la memoria. Este grupo de búferes compartidos es el componente principal de la memoria compartida usada por el servidor. El valor predeterminado es 128 MB (según el nivel de proceso). Si decide asignar más memoria, debe reiniciar el servidor.
wal_buffers define el número de búferes de páginas de disco en la memoria compartida para el registro de escritura previa (WAL) antes de escribirlo en el almacenamiento persistente.
En resumen, los parámetros de servidor importantes relacionados con la memoria que podría querer optimizar son:
- shared_buffers
- work_mem
- effective_cache_size