Ho ricevuto una definizione al di sotto di Bob Dorr su ciò che controlla la memoria del server Max in SQL Server 2012. Puoi anche leggere libri online per maggiori dettagli
La memoria massima del server controlla l'allocazione della memoria di SQL Server, inclusi pool di buffer, memoria di compilazione, tutte le cache, richieste di memoria qe, memoria di gestione blocchi e memoria CLR (praticamente qualsiasi "impiegato" come si trova in dm_os_memory_clerks). La memoria per stack di thread, heap di memoria, provider di server collegati diversi da SQL Server o qualsiasi memoria allocata da una DLL "non SQL Server" non è controllata dalla memoria massima del server.
Memoria allocata per stack di thread, DLL di terze parti, provider di server collegati diverso da quello di Microsoft (come MySQL.PostgreSQL ecc.) O qualsiasi DLL caricata nello spazio degli indirizzi di SQL Server che non è SQL Server viene allocata al di fuori della memoria massima del server. Anche l'operazione di backup IIRC in SQL Server 2012 è ancora allocata memoria al di fuori del pool di buffer.
Stai utilizzando un server collegato per eseguire query su altri RDBMS? Qualsiasi altro software installato sullo stesso computer Windows. Puoi pubblicare su una posizione condivisa l'output delle seguenti query
select type,
sum(pages_kb)/1024 as [Memory utilized in MB],
sum(awe_allocated_kb)/1024 as [Memory allocated though Windows API]
from sys.dm_os_memory_clerks
group by type
order by [Memory utilized in MB] desc
Go
-------
select (virtual_address_space_committed_kb/1024) as virtual_address_space_committed_MB,
(locked_page_allocations_kb/1024) locked_page_allocations_MB,
(pages_kb/1024) [memory allocated MB]
from sys.dm_os_memory_nodes
Go
-------
SELECT SUM (pages_in_bytes)/1024 as 'KB Used', type
FROM sys.dm_os_memory_objects
GROUP BY type
ORDER BY 'KB Used' DESC;
GO
--------
select name,
type,
sum(pages_kb)/1024 as [Mem MB],
sum(entries_count) as [Total Entry count] from sys.dm_os_memory_cache_counters
group by
type, name
order by [Mem MB] desc
Go
-----
select * from sys.dm_os_loaded_modules where company <> 'Microsoft Corporation'
go
Puoi anche caricare l' DBCC MMEMORYSTATUS
output completo su una posizione condivisa e pubblicare il link qui. Ciò aiuterebbe a capire quale componente sta prendendo memoria
Modifica: secondo l'output di dbcc memorystatus posso vedere 2 nodi NUMA e la memoria utilizzata da ciascun nodo è di ca.
Node 1 : VM Committed 33554380
Node 2: VM Committed 33554420
Total is approx 64 G.
Ancora una volta, se vedi Memory Manager in memorystatus ne viene visualizzato l'output
Memory Manager KB
---------------------------------------- -----------
VM Reserved 260726964
VM Committed **67108820**
Il commit della VM è in realtà memoria virtuale impegnata da SQL Server e poiché questa memoria è impegnata ha physical memory backing it
. Questo di nuovo, il che mi fa pensare che SQL Server stia usando 65 G come impostato nella memoria massima del server
Questa è la memoria massima del server. Quindi la memoria è ben distribuita tra i due nodi, è possibile anche aggiungere l'output dello jut di query sottostante per verificare. Aggiungi screenshot
SELECT (physical_memory_in_use_kb/1024)/1024 AS [PhysicalMemInUseGB]
FROM sys.dm_os_process_memory;
GO
SELECT TOP (20) * FROM sys.dm_os_memory_clerks ORDER BY pages_kb DESC;
?