Optimizar 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 la identifica como una instancia con un consumo de memoria elevado.

Memoria de SQL Server

La memoria de SQL Server se puede dividir en lo siguiente:

Cachés

Son objetos de un disco que se pueden volver a cargar, como páginas de bases de datos y procedimientos almacenados. Por lo tanto, SQL Server puede aumentar y reducir el tamaño de estos objetos en función del uso de la memoria. Las cachés incluyen grupos de búferes y cachés de planes.

Memoria fija

La memoria fija puede aumentar y reducirse. Solo se reduce cuando no se usa; por ejemplo, cuando disminuye el número de conexiones o el número de consultas que se están ejecutando. Es diferente de las cachés. Si no hay suficiente memoria fija, SQL Server puede quedarse sin memoria. La memoria fija incluye la memoria de conexión y las concesiones de memoria.

Sobrecarga de SQL Server

La sobrecarga de SQL Server incluye hilos y pilas.

OLTP en memoria

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

El consumo de memoria de SQL Server se controla mediante los ajustes maximum server memory y memory.memory.limitmb. Cloud SQL asigna el parámetro memory.memory.limitmb automáticamente.

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

Opciones de optimización de la memoria

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

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

    Te recomendamos que dejes que Cloud SQL gestione el valor de esta marca. Si debes gestionar este valor manualmente, usa la fórmula de uso 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 Banderas especiales.

  • Monitoriza la marca Page life expectancy.

    Page life expectancy indica el tiempo, en segundos, que la página más antigua permanece en el grupo de búferes. Este valor debe ser superior a 300, tal como recomienda Microsoft. Si se mantiene por debajo de 300, podría indicar que la instancia tiene un uso elevado de la memoria. Ejecuta la siguiente consulta para monitorizar 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'
        
  • Comprueba la marca Memory Grants Pending.

    Memory Grants Pending especifica el número total de procesos que esperan una concesión de memoria del espacio de trabajo. Ejecuta la siguiente consulta para comprobar Memory Grants Pending. Si esta consulta muestra constantemente concesiones pendientes, significa que el uso de memoria es elevado. Para reducirla, puedes consultar las esperas de la base de datos y ajustar cualquier instrucció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'
        

Siguientes pasos