Mirando la disponibilidad de RAM para este servidor en particular y está ejecutando varias bases de datos que van desde 30 GB a 5 GB , definitivamente necesita más RAM en este servidor.
No ha mencionado que esta es una instancia independiente o que este servidor está ejecutando más de una instancia de servidor SQL.
La configuración de la memoria MAX parece correcta para un servidor que tiene 8 GB de RAM. Vea estos ajustes sugeridos de mejores prácticas de Glenn Berry .
Recomiendo encarecidamente que haga una línea base de su entorno utilizando los contadores PERFMON a continuación para obtener un buen valor de la configuración de su memoria:
- SQL Server: Administrador de búfer \ Esperanza de vida de página
- SQL Server: Administrador de búfer \ Lecturas de página / seg.
- Disco físico \ Lecturas de disco / seg.
- Memoria \ Mbytes disponibles
- SQL Server: Administrador de memoria - Memoria total del servidor
- SQL Server: Administrador de memoria - Memoria del servidor de destino
Memoria total del servidor: cantidad de memoria asignada actualmente a la agrupación de almacenamiento intermedio y no la cantidad total de memoria a SQL Server
Memoria del servidor de destino: tamaño ideal del grupo de búferes correspondiente a la memoria máxima para la instancia.
Nota: Si la memoria total del servidor> la memoria del servidor de destino, sugiere presión de memoria.
El siguiente script lo ayudará a encontrar notificaciones de memoria BAJA o ALTA de sys.dm_os_ring_buffers
la sesión de estado del sistema:
SELECT CONVERT (varchar(30), GETDATE(), 121) as [RunTime],
dateadd (ms, (rbf.[timestamp] - tme.ms_ticks), GETDATE()) as [Notification_Time],
cast(record as xml).value('(//Record/ResourceMonitor/Notification)[1]', 'varchar(30)') AS [Notification_type],
cast(record as xml).value('(//Record/MemoryRecord/MemoryUtilization)[1]', 'bigint') AS [MemoryUtilization %],
cast(record as xml).value('(//Record/MemoryNode/@id)[1]', 'bigint') AS [Node Id],
cast(record as xml).value('(//Record/ResourceMonitor/IndicatorsProcess)[1]', 'int') AS [Process_Indicator],
cast(record as xml).value('(//Record/ResourceMonitor/IndicatorsSystem)[1]', 'int') AS [System_Indicator],
cast(record as xml).value('(//Record/MemoryNode/ReservedMemory)[1]', 'bigint') AS [SQL_ReservedMemory_KB],
cast(record as xml).value('(//Record/MemoryNode/CommittedMemory)[1]', 'bigint') AS [SQL_CommittedMemory_KB],
cast(record as xml).value('(//Record/MemoryNode/AWEMemory)[1]', 'bigint') AS [SQL_AWEMemory],
cast(record as xml).value('(//Record/MemoryNode/SinglePagesMemory)[1]', 'bigint') AS [SinglePagesMemory],
cast(record as xml).value('(//Record/MemoryNode/MultiplePagesMemory)[1]', 'bigint') AS [MultiplePagesMemory],
cast(record as xml).value('(//Record/MemoryRecord/TotalPhysicalMemory)[1]', 'bigint') AS [TotalPhysicalMemory_KB],
cast(record as xml).value('(//Record/MemoryRecord/AvailablePhysicalMemory)[1]', 'bigint') AS [AvailablePhysicalMemory_KB],
cast(record as xml).value('(//Record/MemoryRecord/TotalPageFile)[1]', 'bigint') AS [TotalPageFile_KB],
cast(record as xml).value('(//Record/MemoryRecord/AvailablePageFile)[1]', 'bigint') AS [AvailablePageFile_KB],
cast(record as xml).value('(//Record/MemoryRecord/TotalVirtualAddressSpace)[1]', 'bigint') AS [TotalVirtualAddressSpace_KB],
cast(record as xml).value('(//Record/MemoryRecord/AvailableVirtualAddressSpace)[1]', 'bigint') AS [AvailableVirtualAddressSpace_KB],
cast(record as xml).value('(//Record/@id)[1]', 'bigint') AS [Record Id],
cast(record as xml).value('(//Record/@type)[1]', 'varchar(30)') AS [Type],
cast(record as xml).value('(//Record/@time)[1]', 'bigint') AS [Record Time],
tme.ms_ticks as [Current Time]
FROM sys.dm_os_ring_buffers rbf
cross join sys.dm_os_sys_info tme
where rbf.ring_buffer_type = 'RING_BUFFER_RESOURCE_MONITOR'
--and cast(record as xml).value('(//Record/ResourceMonitor/Notification)[1]', 'varchar(30)') = 'RESOURCE_MEMPHYSICAL_LOW'
ORDER BY rbf.timestamp ASC
Algunas buenas referencias: