Optimiza el uso 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.

Opciones para optimizar la memoria

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

  • Verifica el valor de la marca max server memory (mb).

    Te recomendamos que permitas que Cloud SQL administre el valor de esta marca. Si debes administrar este valor de forma manual, usa la fórmula de uso de max_server_memory (mb) que se describe en Prácticas recomendadas para evitar que SQL Server consuma toda la memoria.

    Para obtener más información, consulta Marcas especiales.

  • Supervisa la marca 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 la marca 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 utilizació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'
        

¿Qué sigue?