Comparteix a través de


Consumo elevado de memoria en Azure Database for PostgreSQL, servidor flexible

SE APLICA A: Azure Database for PostgreSQL con servidor flexible

En este artículo se presentan escenarios comunes y causas principales que podrían dar lugar a un uso elevado de memoria en Azure Database for PostgreSQL: servidor flexible.

En este artículo, aprenderá lo siguiente:

  • Acerca de las guías de solución de problemas para identificar y obtener recomendaciones para mitigar las causas principales.
  • Herramientas para identificar un uso elevado de memoria.
  • Razones para acciones de memoria y corrección elevadas.

Guías de solución de problemas

Con las guías de solución de problemas de características que están disponibles en el portal de Azure Database for PostgreSQL: servidor flexible, se puede encontrar la posible causa principal y las recomendaciones para mitigar el escenario de memoria alta. Para ver cómo configurar las guías de solución de problemas para usarlas, siga las guías de solución de problemas de configuración.

Herramientas para identificar un uso elevado de memoria

Tenga en cuenta las siguientes herramientas para identificar un uso elevado de memoria.

Métricas de Azure

Use Métricas de Azure para supervisar el porcentaje de memoria en uso para el período de fecha y hora definitivos.
Para una supervisión proactiva, configure alertas sobre las métricas. Para obtener instrucciones paso a paso, consulte Métricas de Azure.

Almacén de consultas

El Almacén de consultas captura automáticamente el historial de consultas y estadísticas de tiempo de ejecución y lo conserva para su revisión.

Almacén de consultas puede correlacionar la información del evento de espera con estadísticas de tiempo de ejecución de consultas. Use Almacén de consultas para identificar las consultas que tienen un consumo elevado de memoria durante el período de interés.

Para obtener más información sobre cómo configurar y usar Almacén de consultas, consulte Almacén de consultas.

Motivos y acciones correctivas

Tenga en cuenta los siguientes motivos y las acciones correctivas para resolver un uso elevado de memoria.

Parámetros del servidor

Los parámetros de servidor siguientes afectan al consumo de memoria y deben revisarse:

Work_Mem

El parámetro work_mem establece la cantidad de memoria que se va a usar en las operaciones de ordenación internas y las tablas hash antes de escribir en los archivos de disco temporales. En su lugar, no se establece en función del número de operaciones de ordenación y hash.

Si la carga de trabajo tiene muchas consultas de ejecución corta con combinaciones simples y operaciones de ordenación mínimas, se recomienda mantener un nivel inferior de work_mem. Si hay algunas consultas activas con combinaciones complejas y ordenaciones, se recomienda establecer un valor mayor para work_mem.

Es difícil obtener el valor correcto de work_mem. Si observa un uso elevado de memoria o problemas de memoria insuficiente, considere la posibilidad de reducir work_mem.

Una configuración más segura para work_mem es work_mem = Total RAM / Max_Connections / 16

El valor predeterminado de work_mem es 4 MB. Puede establecer el valor work_mem en varios niveles, incluidos en el nivel de servidor a través de la página de parámetros del Azure Portal.

Una buena estrategia es supervisar el consumo de memoria durante las horas punta.

Si las ordenaciones de disco se producen durante este tiempo y hay mucha memoria sin usar, aumente work_mem gradualmente hasta que pueda alcanzar un buen equilibrio entre la memoria disponible y la memoria usada. De forma similar, si el uso de memoria tiene un aspecto alto, reduzca work_mem.

Maintenance_Work_Mem

maintenance_work_mem es para tareas de mantenimiento como la aspiración, la adición de índices o claves externas. El uso de memoria en este escenario es por sesión.

Por ejemplo, considere un escenario en el que se ejecutan tres trabajos de autovacuum.

Si maintenance_work_mem se establece en 1 GB, todas las sesiones combinadas usarán 3 GB de memoria.

Un valor alto maintenance_work_mem junto con varias sesiones en ejecución para la creación de vacíos, índices o la adición de claves externas puede provocar un uso elevado de memoria. El valor máximo permitido para el parámetro de servidor maintenance_work_mem en el servidor flexible de Azure Database for PostgreSQL es de 2 GB.

Búferes compartidos

El parámetro shared_buffers determina la cantidad de memoria dedicada al servidor para almacenar datos en caché. El objetivo de los búferes compartidos es reducir la E/S del disco.

Una configuración razonable para los búferes compartidos es el 25 % de RAM. No se recomienda establecer un valor de más del 40 % de RAM para las cargas de trabajo más comunes.

Conexiones máximas

Todas las conexiones nuevas e inactivas en una base de datos de servidor flexible de Azure Database for PostgreSQL consumen hasta 2 MB de memoria. Una manera de supervisar las conexiones es mediante la consulta siguiente:

select count(*) from pg_stat_activity;

Cuando el número de conexiones a una base de datos es alto, también aumenta el consumo de memoria.

En situaciones en las que hay muchas conexiones de base de datos, considere la posibilidad de usar un agrupador de conexiones como PgBouncer.

Para obtener más información sobre PgBouncer, revise:

Agrupación de conexiones.

Procedimientos recomendados.

El servidor flexible de Azure Database for PostgreSQL ofrece PgBouncer como una solución de agrupación de conexiones integrada. Para obtener más información, consulte las PgBouncer.

Explicación del análisis

Una vez que se identificadas las consultas de consumo elevado de memoria de Almacén de consultas, use EXPLAIN y EXPLAIN ANALYZE para investigar más y ajustarlas.

Para obtener más información sobre el comando EXPLAIN, consulte Explain Plan.