¿Cómo soluciono los problemas de memoria con poca capacidad de liberación en mi instancia de RDS para SQL Server?

9 minutos de lectura
0

¿Cómo puedo solucionar el problema de memoria con poca capacidad de liberación en mi instancia de base de datos relacional de Amazon (Amazon RDS) para SQL Server?

Descripción corta

Una memoria con poca capacidad de liberación provoca tiempos de inactividad inesperados en la instancia. Por lo tanto, es importante supervisar el uso de la memoria en la instancia y tomar medidas correctivas.

La memoria con capacidad de liberación es la cantidad de memoria (RAM) disponible en la instancia de RDS. La cantidad total de memoria disponible en una instancia de Amazon RDS depende de la clase de instancia. Por ejemplo, la clase de instancia db.r5.8xlarge brinda 32 vCPU y 256 GiB de memoria. Si aprovisiona una instancia de RDS con la clase de instancia db.r5.8xlarge, la memoria total de la clase de instancia (256 GiB) se comparte de la siguiente manera:

  • Sistema operativo (SO)
  • Procesos de Amazon RDS
  • Motor de base de datos
  • Subprocesos de empleados
  • Aplicaciones del paquete de inteligencia empresarial (SSIS, SSAS, SSRS), etc.

Para obtener más información sobre cómo SQL Server usa la memoria, consulte la Guía de arquitectura de administración de memoria en el sitio web de documentación de Microsoft.

Resolución

Supervise el uso de memoria en su instancia

Métricas de Amazon CloudWatch

Supervise las métricas de Amazon CloudWatch de FreeableMemory para identificar los casos de poca memoria. Junto con FreeableMemory, puede supervisar lo siguiente para identificar un aumento en la carga de trabajo cuando la memoria disponible es baja:

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Supervisión mejorada

La Supervisión mejorada se puede activar con diferentes granularidades, como 1, 5, 10, 15, 30 o 60 segundos para supervisar las métricas del sistema operativo de Microsoft SQL Server. Se recomienda establecer la granularidad en 1 o 5 segundos (el valor predeterminado es 60 segundos). Puede crear alarmas de CloudWatch a fin de supervisar el consumo de memoria de su instancia de base de datos de Amazon RDS para SQL Server mediante la Supervisión mejorada

Solucione problemas de memoria con poca capacidad de liberación

Para solucionar problemas de memoria con poca capacidad de liberación, haga lo siguiente:

Limite la memoria que usa la instancia de RDS

Limite la memoria que usa la instancia de RDS al establecer la memoria máxima del servidor en un valor que no provoque presión sobre la memoria en todo el sistema. Puede determinar el valor máximo de memoria del servidor para su instancia mediante la siguiente fórmula:

max_server_memory = total_RAM – (1 GB para el SO + memory_basis_amount_of_RAM_on_the_server)

Total_RAM es igual a la memoria de la clase de instancia, donde memory_basis_amount_of_RAM_on_the_server se determina de la siguiente manera:

  • Si la RAM del servidor está entre 4 GB y 16 GB: deje 1 GB por cada 4 GB de RAM. Por ejemplo, para un servidor con 16 GB, deje 4 GB.
  • Si la RAM del servidor supera los 16 GB: deje 1 GB por cada 4 GB de RAM hasta 16 GB y 1 GB por cada 8 GB de RAM por encima de 16 GB.

Por ejemplo, si un servidor tiene 64 GB de RAM, el cálculo es el siguiente:

  • 1 GB para el SO
  • Hasta 16 GB de RAM: 16/4 = 4 GB
  • RAM restante superior a 16 GB: (64-16)/8 = 6
  • RAM total que queda: 1 + 4 + 6 = 11 GB
  • max_server_memory: 64 – 11 = 53 GB

Notas:

  • Si usa SSIS, SSAS o SSRS en la instancia, max_server_memory debe ajustarse para adaptarse a estos componentes.
    Ejemplo: desea usar SSRS con la instancia de RDS. Establezca el valor Máximo de memoria de SSRS en 10 % (porcentaje de la memoria total de la instancia de base de datos). Esto equivale a unos 6,4 GiB en una instancia con 64 GiB de memoria. El valor max_server_memory debe ser de aproximadamente 46 GiB (64-11-6,4).
  • Tras la configuración inicial de max_server_memory, FreeableMemory debe supervisarse constantemente para decidir si se debe aumentar o disminuir la memoria asignada.

Para cambiar max_server_memory, configure el valor mediante un grupo de parámetros personalizado. El valor de max_server_memory debe brindarse en MB.

Nota: El parámetro max_server_memory es un parámetro dinámico. Por lo tanto, no es necesario reiniciar el sistema para que los cambios surtan efecto.

Compruebe las conexiones de base de datos

Cada conexión de base de datos realizada a la instancia requiere una asignación de memoria fuera del grupo de búferes para los subprocesos de empleados. Por lo tanto, un aumento en DatabaseConnections puede provocar una caída en la memoria con capacidad de liberación.

Compruebe si se utilizan componentes de SSIS, SSAS o SSRS en la instancia de base de datos

Mediante el grupo de opciones de Amazon RDS para SQL Server, identifique si se utilizan componentes de SSIS, SSAS o SSRS en la instancia de base de datos. La memoria que utilizan estos componentes existe fuera de la configuración max_server_memory. Si no usa estas funciones, elimínelas al modificar el grupo de opciones. La eliminación de estas funciones reduce la capacidad de memoria de la instancia.

Supervise la instancia de base de datos mediante Performance Insights (Información sobre rendimiento)

Con Información de rendimiento, puede supervisar la instancia de base de datos para el análisis del rendimiento de la base. Puede utilizar el panel de Información sobre rendimiento para supervisar la carga de la base de datos, las esperas, las consultas, los hosts, los usuarios, etc. Supervisarlos ayuda a identificar los posibles obstáculos que ralentizan la instancia.

Realice un mantenimiento regular de la instancia de base de datos

Realice un mantenimiento regular de los índices y mantenga las estadísticas actualizadas. Los índices muy fragmentados pueden provocar un aumento de la actividad de E/S, lo que conlleva un mayor consumo de memoria. Del mismo modo, las estadísticas obsoletas pueden provocar una estimación inexacta de la cardinalidad, lo que conduce a la selección de un plan de consulta subóptimo.

Nota: Se recomienda realizar el mantenimiento de los índices y las estadísticas durante las horas de menor actividad o durante un período de mantenimiento.

Supervise la expectativa de vida de la página y la tasa de aciertos de la caché del búfer

La expectativa de vida de la página (Page Life Expectancy, PLE) indica la cantidad de segundos que una página permanece en el grupo de búferes sin referencias.

La tasa de aciertos de la caché del búfer (Buffer Cache Hit Ratio, BCHR) es el porcentaje de solicitudes de página satisfechas por las páginas de datos del grupo de búferes.

La supervisión de PLE y BCHR identifica la presión de la memoria. Para supervisar estas métricas mediante la Información sobre rendimiento, haga lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. Seleccione Performance Insights (Información sobre rendimiento).
  3. Seleccione la instancia de RDS para SQL Server que desee supervisar.
  4. Defina el intervalo de tiempo para el que desea revisar las métricas y, luego, seleccione Manage Metrics (Administrar métricas).
  5. Seleccione Database Metrics (Métricas de base de datos), Page Life Expectancy, Buffer Cache Hit Ratio (Expectativa de vida de la página, Tasa de aciertos de la caché del búfer).

Para obtener un rendimiento óptimo, los valores de estas métricas deben ser lo más altos posible. Puede supervisar estas métricas mediante la Información sobre rendimiento. Es posible que vea que los valores de estas métricas son constantemente bajos durante un período de tiempo. Si esto ocurre, ajuste las consultas que acceden a los datos o aumente la clase de instancia para disponer de más memoria.

Cuando hay presión de memoria en la instancia, junto con niveles bajos de PLE y BCHR, la espera de PAGEIOLATCH aumenta. Esto significa que SQL Server está esperando a que se extraiga una página del disco y se cargue en la memoria. Además, la espera de RESOURCE_SEMAPHORE puede notarse cuando no se pueden cumplir las solicitudes de memoria de una consulta debido a la pérdida de memoria. Esto provoca un aumento en el uso de la CPU porque las páginas de datos no se almacenan en caché el tiempo suficiente en la memoria. Cuando esto ocurre, SQL Server tiene que acceder al disco repetidamente para acceder a los datos que provocan problemas de rendimiento.

Identifique las consultas con la mayoría de los recursos

Con la Información sobre rendimiento, capture las consultas con la mayor cantidad de recursos y ajústelas para obtener un mejor rendimiento.

Seleccione el tamaño de instancia correcto para su carga de trabajo

La cantidad de memoria de una instancia depende del tipo de instancia. Es importante seleccionar una clase de instancia con los recursos adecuados a fin de que la instancia de base de datos tenga suficientes recursos para la carga de trabajo. Una instancia con menos recursos tendrá problemas de rendimiento y una instancia sobredimensionada desperdiciará recursos.

Evalúe el uso de los recursos

Evalúe el uso de recursos en la instancia mediante la supervisión de métricas como FreeableMemory, la expectativa de vida de la página, la tasa de aciertos de la caché del búfer, etc. Si hay un aumento significativo en el volumen de datos de la instancia, aumente el valor max_server_memory. Aumente el valor max_server_memory en proporción al cambio en el volumen de datos para mantener el mismo nivel de rendimiento en la instancia.

Notas: Puede utilizar las herramientas nativas de SQL Server, como los informes y los DMV, para identificar los componentes mediante la memoria de SQL Server. Con SQL Server Management Studio (SSMS), puede revisar el uso de memoria de SQL Server:

  1. Abra SQL Server Management Studio (SSMS) y conéctese a su instancia de RDS para SQL Server.
  2. En el Explorador de objetos, haga clic con el botón derecho en el nombre del punto de conexión de la instancia de RDS.
  3. Seleccione Reports (Informes), Standard Reports (Informes estándar) y Memory Consumption (Consumo de memoria).

Además, puede consultar el DMV sys.dm_os_memory_clerks para identificar los componentes que utilizan el máximo de memoria dentro de SQL Server.