Memoria de RDS para PostgreSQL - Amazon Relational Database Service

Memoria de RDS para PostgreSQL

La memoria de RDS para PostgreSQL se divide en compartida y local.

Memoria compartida en RDS para PostgreSQL

RDS para PostgreSQL asigna memoria compartida cuando se inicia la instancia. La memoria compartida se divide en múltiples subáreas. En las siguientes secciones se proporcionan descripciones de las más importantes.

Búferes compartidos

El grupo de búferes compartidos es un área de memoria de RDS para PostgreSQL que contiene todas las páginas que utilizan o han utilizado las conexiones de la aplicación. Una página es la versión de memoria de un bloque de disco. El grupo de búferes compartidos almacena en caché los bloques de datos leídos desde el disco. El grupo reduce la necesidad de volver a leer los datos del disco, lo que hace que la base de datos funcione de forma más eficiente.

Cada tabla e índice se almacena como una matriz de páginas de tamaño fijo. Cada bloque contiene varias tuplas, que corresponden a filas. Una tupla se puede almacenar en cualquier página.

El grupo de búferes compartidos tiene memoria finita. Si una nueva solicitud requiere una página que no está en la memoria, y no hay más memoria, RDS para PostgreSQL desaloja una página que se utiliza con menos frecuencia para satisfacer la solicitud. La política de expulsión se implementa mediante un algoritmo de barrido de reloj.

El parámetro shared_buffers determina la cantidad de memoria que el servidor dedica al almacenamiento en caché de los datos. El valor predeterminado se establece en {DBInstanceClassMemory/32768} bytes, en función de la memoria disponible para la instancia de base de datos.

Búferes de registro de escritura anticipada (WAL)

Un búfer del registro de escritura anticipada (WAL) contiene datos de transacciones que RDS para PostgreSQL escribe posteriormente en el almacenamiento persistente. Con el mecanismo WAL, RDS para PostgreSQL puede hacer lo siguiente:

  • Recuperar datos después de un error

  • Reducir la E/S del disco al evitar las escrituras frecuentes en el disco

Cuando un cliente cambia los datos, RDS para PostgreSQL escribe los cambios en el búfer de WAL. Cuando el cliente emite un COMMIT, el proceso de escritura WAL escribe los datos de la transacción en el archivo WAL.

El parámetro wal_level determina la cantidad de información que se escribe en el WAL, con posibles valores como minimal, replica y logical.

Memoria local en RDS para PostgreSQL

Cada proceso de backend asigna memoria local para el procesamiento de consultas.

Área de memoria de trabajo

El área de memoria de trabajo contiene datos temporales para las consultas que ejecutan ordenaciones y hashes. Por ejemplo, una consulta con una cláusula ORDER BY ejecuta una ordenación. Las consultas utilizan tablas hash en uniones hash y agregaciones.

El parámetro work_mem indica la cantidad de memoria que se utilizará en las operaciones internas de ordenación y en las tablas hash antes de escribir en los archivos temporales del disco, medido en megabytes. El valor predeterminado es 4 MB. Se pueden ejecutar varias sesiones simultáneamente, y cada sesión puede ejecutar operaciones de mantenimiento en paralelo. Por esta razón, la memoria de trabajo total utilizada puede ser múltiplo del parámetro work_mem.

Área de memoria de trabajo de mantenimiento

El área de memoria de trabajo de mantenimiento almacena en caché los datos de las operaciones de mantenimiento. Estas operaciones incluyen el vaciado, creación de un índice y adición de claves externas.

El parámetro maintenance_work_mem especifica la cantidad máxima de memoria que utilizarán las operaciones de mantenimiento, medido en megabytes. El valor predeterminado es 64 MB. Una sesión de base de datos solo puede ejecutar una operación de mantenimiento a la vez.

Área de búfer temporal

El área de búfer temporal almacena en caché las tablas temporales de cada sesión de la base de datos.

Cada sesión asigna búferes temporales según sea necesario hasta el límite que se especifique. Cuando finaliza la sesión, el servidor borra los búferes.

El parámetro temp_buffers establece el número máximo de búferes temporales utilizados por cada sesión, medido en megabytes. El valor predeterminado es 8 MB. Antes del primer uso de las tablas temporales dentro de una sesión, puede cambiar el valor de temp_buffers.