Supervisión del uso de la memoria

Se aplica a:SQL Server

Supervise una instancia de SQL Server periódicamente para confirmar que el uso de memoria se encuentra dentro de los rangos normales.

Configuración de la memoria máxima de SQL Server

De forma predeterminada, con el tiempo una instancia de SQL Server puede consumir la mayor parte de la memoria del sistema operativo Windows disponible en el servidor. Una vez que se ha adquirido la memoria, no se liberará a menos que se detecte presión de memoria. Esto es así por diseño y no indica una fuga de memoria en el proceso de SQL Server. Use la opción memoria de servidor máxima para limitar la cantidad de memoria que SQL Server puede adquirir para la mayoría de sus usos. Para obtener más información, vea la Guía de arquitectura de administración de memoria.

En SQL Server para Linux, establezca el límite de memoria con la herramienta mssql-conf y el valor memory.memorylimitmb.

Supervisión de la memoria del sistema operativo

Para supervisar las condiciones de memoria insuficiente, use los contadores de servidor de Windows siguientes. Muchos contadores de memoria del sistema operativo se pueden consultar a través de las vistas de administración dinámica sys.dm_os_process_memory y sys.dm_os_sys_memory.

  • Memoria: Bytes disponibles
    Este contador indica cuántos bytes de memoria están disponibles actualmente para usarse en los procesos. Los valores bajos del contador Bytes disponibles pueden indicar una escasez general de memoria del sistema operativo. Este valor se puede consultar mediante T-SQL con sys.dm_os_sys_memory.available_physical_memory_kb.

  • Memoria: Páginas/seg
    Este contador indica el número de páginas que se han recuperado del disco debido a errores de página no recuperables, o bien que se han escrito en disco para liberar espacio en el espacio de trabajo debido a errores de página. Un valor alto en el contador Páginas/s puede indicar una paginación excesiva.

  • Memoria: Errores de página/s Este contador indica la tasa de errores de página para todos los procesos, incluidos los del sistema. Una tasa baja pero distinta de cero de paginación en disco (y, por tanto, de errores de página) es normal, incluso si el equipo tiene mucha memoria disponible. El Administrador de memoria virtual (VMM) de Microsoft Windows sustrae páginas de SQL Server y otros procesos a medida que recorta los tamaños del espacio de trabajo para estos procesos. lo que suele provocar errores de página.

  • Proceso: Errores de página/s Este contador indica la tasa de errores de página para un proceso de usuario concreto. Supervise Proceso: Errores de página/s para determinar si la actividad de disco está causada por la paginación de SQL Server. Para determinar si SQL Server u otro proceso causan una paginación excesiva, supervise el contador Proceso: Errores de página/s de la instancia del proceso de SQL Server.

Para obtener más información sobre cómo solucionar la paginación excesiva, vea la documentación del sistema operativo.

Aislamiento de la memoria usada por SQL Server

Para supervisar el uso de memoria de SQL Server, utilice los siguientes contadores de objeto de SQL Server. Muchos contadores de objeto de SQL Server se pueden consultar a través de las vistas de administración dinámica sys.dm_os_performance_counters o sys.dm_os_process_memory.

De forma predeterminada, SQL Server cambia dinámicamente sus requisitos de memoria, según los recursos del sistema disponibles. Si SQL Server necesita más memoria, consulta el sistema operativo para determinar si hay memoria física disponible y la utiliza. Si el sistema operativo tiene poca memoria libre, SQL Server devolverá memoria al sistema operativo hasta que se solucione esa circunstancia, o hasta que SQL Server alcance el límite de memoria de servidor mínima. Pero se puede invalidar el uso dinámico de la memoria mediante las opciones de configuración del servidor memoria de servidor mínima y memoria de servidor máxima. Para obtener más información, vea el documento sobre las opciones de memoria del servidor.

Para supervisar la cantidad de memoria que utiliza SQL Server, examine los siguientes contadores de rendimiento:

  • SQL Server: Memory Manager: Memoria total del servidor (KB)
    Este contador indica la cantidad de memoria del sistema operativo que el administrador de memoria de SQL Server ha confirmado actualmente a SQL Server. Se espera que este número crezca en función de las necesidades de la actividad real y lo haga después del inicio de SQL Server. Consulte este contador mediante la vista de administración dinámica sys.dm_os_sys_info y observe la columna committed_kb.

  • SQL Server: Memory Manager: Memoria del servidor de destino (KB)
    Este contador indica una cantidad de memoria ideal que SQL Server podría consumir, en función de la carga de trabajo reciente. Compárelo con Memoria total del servidor después de un período de funcionamiento normal para determinar si SQL Server tiene una cantidad de memoria deseada asignada. Después del funcionamiento normal, los valores Memoria total del servidor y Memoria del servidor de destino deben ser similares. Si el valor de Memoria total del servidor es significativamente menor que el de Memoria del servidor de destino, es posible que la instancia de SQL Server experimente presión de memoria. Durante un período posterior al inicio de SQL Server, se espera que el valor de Memoria total del servidor sea inferior al de Memoria del servidor de destino mientras aumenta Memoria total del servidor. Consulte este contador mediante la vista de administración dinámica sys.dm_os_sys_info y observe la columna committed_target_kb. Para obtener más información y los procedimientos recomendados para configurar la memoria, vea Opciones de configuración de memoria del servidor.

  • Proceso: Espacio de trabajo
    Este contador indica la cantidad de memoria física que un proceso usa actualmente, según el sistema operativo. Observe la instancia de sqlservr.exe de este contador. Consulte este contador mediante la vista de administración dinámica sys.dm_os_process_memory y observe la columna physical_memory_in_use_kb.

  • Proceso: Bytes privados
    Este contador indica la cantidad de memoria que un proceso ha solicitado al sistema operativo para uso propio. Observe la instancia de sqlservr.exe de este contador. Como este contador incluye todas las asignaciones de memoria solicitadas por sqlservr.exe, incluidas las que no están limitadas por la opción de memoria de servidor máxima, puede notificar valores mayores que la opción de memoria de servidor máxima.

  • SQL Server: Administrador de búfer: Páginas de base de datos
    Este contador indica el número de páginas en el grupo de búferes con contenido de la base de datos. No incluye otra memoria de grupo que no sea de búfer en el proceso de SQL Server. Consulte este contador con la vista de administración dinámica sys.dm_os_performance_counters.

  • SQL Server: Buffer Manager: Frecuencia de aciertos de caché del búfer
    Este contador es específico de SQL Server. Lo recomendables es una proporción de 90 o superior. Un valor mayor de 90 indica que se ha atendido más del 90% de todas las solicitudes de datos desde la caché de datos en memoria sin tener que leer del disco. Para obtener más información sobre Buffer Manager de SQL Server, vea Buffer Manager (objeto de SQL Server). Consulte este contador con la vista de administración dinámica sys.dm_os_performance_counters.

  • SQL Server: Buffer Manager: Duración prevista de la página
    Este contador mide la cantidad de tiempo en segundos que la página más antigua permanece en el grupo de búferes. En los sistemas que usan una arquitectura NUMA, es el promedio de todos los nodos de NUMA. Se recomienda un valor creciente más alto. Un descenso repentino indica una renovación considerable de los datos dentro y fuera del grupo de búferes, lo que indica que la carga de trabajo no se ha beneficiado por completo de los datos que ya están en la memoria. Cada nodo de NUMA tiene su propio nodo del grupo de búferes. En servidores con más de un nodo de NUMA, vea la duración prevista de la página de cada nodo del grupo de búferes mediante SQL Server: Buffer Manager: Duración prevista de la página. Consulte este contador con la vista de administración dinámica sys.dm_os_performance_counters.

Ejemplos

Determinar la asignación de memoria actual

Las consultas siguientes devuelven información sobre la memoria asignada actualmente.

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

Determinación del uso de memoria actual de SQL Server

La consulta siguiente devuelve información sobre el uso de memoria actual de SQL Server.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

Determinación de la duración prevista de la página

En la consulta siguiente se usa sys.dm_os_performance_counters para observar el valor Duración prevista de la página actual de la instancia de SQL Server en el nivel general del administrador de búfer y en cada nivel de nodo de NUMA.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters    
WHERE counter_name = 'Page life expectancy';