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é
- Memoria fija
- Sobrecarga de SQL Server
- Procesamiento transaccional en línea en la memoria (OLTP)
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 establecermax 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 supervisarPage 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 verificarMemory 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'