Solución:
SQL Server usa muchas más cachés además de la caché de búfer, aunque esa es, con mucho, la más grande (un ejemplo obvio es la caché del plan). Puedes echar un vistazo más de cerca a la memoria a través de DBCC MEMORYSTATUS
y una variedad de DMV. La memoria de destino y la memoria total se refieren específicamente al Buffer Pool / Cache.
Extracto del seminal Professional SQL Server 2008 Internals and Troubleshooting de Christian Bolton:
MSSQL$<instance >:Memory ManagerTotal Server Memory (KB)
:
Esto indica el tamaño actual de la agrupación de almacenamientos intermedios.MSSQL$<instance >:Memory ManagerTarget Server Memory (KB)
:
Esto indica el tamaño ideal para el grupo de almacenamientos intermedios. Total y Target deberían ser casi iguales en un servidor sin presión de memoria que se haya estado ejecutando durante un tiempo. Si Total es significativamente menor que Objetivo, entonces es probable que SQL Server no pueda hacer crecer el grupo de búfer debido a la presión de la memoria, en cuyo caso puede investigar más a fondo.
Para empezar debo decir que te has puesto memoria máxima del servidor a 6 GB y memoria total es de 8 GB, por lo que acaba de dejar 2 GB para el sistema operativo, que en muchos casos, incluso si no hay nada instalado aparte de SQL Server en una máquina con Windows, es muy poca memoria proporcionada al sistema operativo. Para que funcione correctamente, en un sistema con antivirus instalado, el sistema operativo debe tener al menos 4 GB. Dejo 2GB para OS inmediatamente y 1.5 G para AV.
La memoria del servidor de destino es a veces de 6 GB y luego vuelve a la memoria total del servidor (aproximadamente 5,3 GB, nunca llega a 6 GB).
Memoria del servidor de destino significa cuánta memoria necesita SQL Server para funcionar correctamente en el caso ideal. La memoria del servidor de destino intenta ser de 6 GB porque ha configurado la memoria máxima del servidor valor a 6 GB. Está tratando de consumir toda la memoria que se le permite.
Memoria total del servidor es lo que SQL Server realmente puede consumir en este momento. Esta es una memoria comprometida y respaldada por una RAM física. Este es un máximo de 5,5 GB en su caso.
SQL Server está tratando de aumentar su consumo de memoria, pero después de alcanzar los 5,3 o 5,5 GB, el sistema operativo le pide a SQL Server que no aumente aún más su consumo de memoria y podría estar marcando una notificación de memoria baja. Esto sucede porque el sistema operativo podría tener poca memoria como ya se dijo anteriormente. SQLOS responde si el sistema operativo Windows se enfrenta a la presión de la memoria pidiendo a sus cachés que reduzcan su consumo. Puede consultar el búfer de anillo para comprobar si se señaló una notificación de memoria baja. Debo agregar DMV sys.dm_os_ring_buffer es indocumentado pero seguro.
Veo que las páginas se eliminan de la caché, pero todavía quedan 700 MB de memoria. Si nada necesita la memoria, ¿cómo explicaría el hecho de que las páginas se eliminan de la memoria caché? Esperaría que SQL Server solo elimine páginas cuando necesita memoria.
Si buscas memoria libre, lo haría no sugerir que mires el DMV sys.dm_os_buffer_descriptors. los Contador de SO Available Mbytes
le dirá la cantidad de memoria física, en bytes, disponible para los procesos que se ejecutan en la computadora. Le sugiero que vea también ¿Qué es un método determinista para evaluar un tamaño de grupo de búfer sensible? y también lea ¿SQL Server necesita más RAM para averiguar cuánta RAM necesita SQL Server y si SQL Server se enfrenta a la presión de la memoria? Por lo que mencionó, si está seguro de que las páginas se están eliminando del grupo de búfer, entonces sí, SQL Server siente que las páginas deben moverse porque necesita espacio para acomodar nuevas páginas. No estoy seguro de cómo calculó los 700 MB libres.
Otra cosa, no busque en el Administrador de tareas el consumo de memoria de SQL Server. No siempre le da el valor correcto, especialmente cuando la cuenta de servicio de SQL Server tiene la bloquear páginas en la memoria privilegio. En su caso, incluso si SQL Server tiene una memoria máxima de servidor de 6 GB, el sistema operativo tiene solo 2 GB, lo que obliga a SQL Server a no aumentar su consumo porque 2 GB es bajo para SQL Server. ¿Hay algo además de SQL Server ejecutándose en el sistema?
Si desea calcular el consumo de memoria de SQL Server, utilice:
select
(physical_memory_in_use_kb/1024) Physical_Memory_usedby_Sqlserver_MB,
(locked_page_allocations_kb/1024 ) Locked_pages_used_Sqlserver_MB,
(virtual_address_space_committed_kb/1024 ) Total_Memory_in_MB,--RAM+ Pagefile
process_physical_memory_low,
process_virtual_memory_low
from sys.dm_os_process_memory
Lo que no entiendo es por qué Total_Memory_in_MB no es igual a 6144 (memoria máxima).
La columna Total_Memory_in_MB significa la memoria total utilizada por SQL Server (RAM + archivo de paginación). La RAM es en realidad memoria física utilizada o memoria comprometida. Una parte del proceso de SQL Server también se pagina en el disco y eso se constituye como memoria virtual o archivo de paginación, por lo que si va a ver la memoria TOTAL consumida por SQL Server, sería la suma de la memoria física y el archivo de paginación.
Mientras que la columna Physical_Memory_usedby_Sqlserver_MB es solo la memoria física (memoria respaldada por RAM física o memoria comprometida) utilizada. Ésta es la razón por la que ambos son diferentes. Si ve la columna real, la primera es Memoria física utilizada y la otra es Memoria virtual comprometida.
Si desea ver la memoria paginada, esa sería la diferencia entre Total_Memory_in_MB y Physical_Memory_usedby_Sqlserver_MB.
NOTA: La memoria total utilizada sería mayor que la memoria física utilizada.