Optimiza el consumo elevado de memoria en las instancias

En este documento, se explica cómo revisar y optimizar una instancia de Cloud SQL para SQL Server si el recomendador de instancias con aprovisionamiento insuficiente identifica que esa instancia tiene un consumo elevado de memoria.

Memoria de SQL Server

La memoria de SQL Server se puede dividir de la siguiente manera:

Caché

Estos son objetos de un disco que se pueden volver a cargar, como las páginas de la base de datos y los procedimientos almacenados. Como resultado, SQL Server puede aumentar y reducir estos objetos según la utilización en la memoria. Las cachés incluyen las de grupos de búferes y de planes.

Memoria fija

La memoria fija puede aumentar o reducirse. Solo se reduce cuando no está en uso. Por ejemplo, cuando disminuye la cantidad de conexiones o disminuye la cantidad de consultas que se ejecutan. Es diferente de las cachés. Si no hay suficiente memoria fija, SQL Server puede quedarse sin memoria. La memoria fija incluye memoria de conexión y otorgamientos de memoria.

Sobrecarga de SQL Server

La sobrecarga de SQL Server incluye subprocesos y pilas.

OLTP en memoria

OLTP en memoria incluye tablas en la memoria y grupos de archivos en la memoria.

El consumo de memoria de SQL Server se controla mediante la configuración de maximum server memory y memory.memory.limitmb. Cloud SQL establece el parámetro memory.memory.limitmb de forma automática.

Para obtener más información sobre memory.memory.limitmb, consulta la documentación de Microsoft.

Debes establecer el límite max server memory en un valor adecuado. En SQL Server, si max server memory no está configurado, las páginas de la base de datos pueden consumir la mayor parte de la memoria hasta alcanzar el 100%. A veces, esto puede ser engañoso.

Opciones para optimizar la memoria

Para determinar si una instancia necesita más ajuste de memoria, haz lo siguiente:

  • Configura el valor de max server memory. Se recomienda establecer max server memory en un 80% para evitar que SQL Server consuma toda la memoria disponible. En el caso de las instancias que tienen grandes cantidades de memoria, el 80% podría ser demasiado bajo y generar un desperdicio de memoria.

  • Supervisa Page life expectancy

    Page life expectancy indica la cantidad de tiempo, en segundos, que la página más antigua permanece en el grupo de búferes. Este valor debe ser mayor que 300 según lo recomendado por Microsoft. Si se reduce de forma constante a menos de 300, podría ser un indicador de que la instancia experimenta una utilización alta de memoria. Ejecuta la siguiente consulta para supervisar Page life expectancy.

    SELECT
      [object_name],
      [counter_name],
      [cntr_value]
    FROM
      sys.dm_os_performance_counters
    WHERE
      [object_name]
    LIKE
      '%Manager%'
    AND
      [counter_name] = 'Page life expectancy'
    
  • Verifica Memory Grants Pending

    Memory Grants Pending especifica la cantidad total de procesos que esperan una concesión de memoria del lugar de trabajo. Ejecuta la siguiente consulta para verificar Memory Grants Pending. Si esta consulta muestra de forma coherente las asignaciones pendientes, indica una utiliazción de memoria alta. Para reducirla, consulta las esperas de la base de datos y ajusta cualquier declaración que esté esperando memoria.

    SELECT
      @@SERVERNAME AS [Server Name],
      RTRIM([object_name]) AS [Object Name],
      cntr_value AS [Memory Grants Pending]
    FROM
      sys.dm_os_performance_counters WITH(NOLOCK)
    WHERE
      [object_name]
    LIKE
      N'%Memory Manager%'  -- Handles named instances
    AND
      counter_name = N'Memory Grants Pending'