Optimizar el uso elevado de memoria en las instancias

Este documento explica cómo revisar y optimizar una instancia de Cloud SQL para SQL Server si el recomendador de instancias con aprovisionamiento insuficiente identifica que dicha instancia tiene un alto consumo de memoria.

Memoria de SQL Server

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

Cachés

Se trata de objetos en un disco que se pueden recargar, como páginas de bases de datos y procedimientos almacenados. Por lo tanto, SQL Server puede aumentar o 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 o disminuir. Solo disminuye cuando no se utiliza; por ejemplo, cuando disminuye el número de conexiones o el número de consultas en ejecución. 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 subprocesos 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 configurando maximum server memory y memory.memory.limitmb . Cloud SQL configura automáticamente el parámetro memory.memory.limitmb .

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

Debe establecer el límite max server memory en un valor adecuado. En SQL Server, si no se establece, las páginas de la max server memory de datos pueden consumir la mayor parte de la memoria, cerca o hasta el 100 %. Esto a veces puede ser engañoso.

Opciones de optimización de memoria

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

  • Establezca el valor de max server memory . La recomendación general es establecer la max server memory en aproximadamente el 80 % para evitar que SQL Server consuma toda la memoria disponible. Para instancias con gran cantidad de memoria, el 80 % podría ser demasiado bajo y provocar un desperdicio de memoria.

  • Page life expectancy monitor

    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, según lo recomendado por Microsoft. Si se mantiene por debajo de 300, podría indicar que la instancia está experimentando un alto uso de memoria. Ejecute 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'
    
  • Comprobar Memory Grants Pending

    Memory Grants Pending especifica el número total de procesos que esperan una concesión de memoria en el espacio de trabajo. Ejecute la siguiente consulta para comprobar Memory Grants Pending . Si esta consulta muestra constantemente concesiones pendientes, indica un alto uso de memoria. Puede reducirlo consultando las esperas de la base de datos y ajustando 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'
    

¿Qué sigue?