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 lamax 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
monitorPage 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 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'
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 comprobarMemory 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'