Mam poniżej definicji od Boba Dorra o tym, jaka pamięć Max serwera kontroluje w SQL Server 2012. Możesz również przeczytać Books Online, aby uzyskać więcej informacji
Maksymalna pamięć serwera kontroluje alokację pamięci SQL Server, w tym pulę buforów, pamięć kompilacji, wszystkie pamięci podręczne, przydzielanie pamięci qe, pamięć menedżera blokady i pamięć CLR (w zasadzie dowolny „urzędnik” znaleziony w dm_os_memory_clerks). Pamięć na stosy wątków, sterty pamięci, dostawców połączonych serwerów innych niż SQL Server lub dowolna pamięć przydzielona przez bibliotekę DLL „inną niż SQL Server” nie jest kontrolowana przez maksymalną pamięć serwera.
Przydzielona pamięć dla stosu wątków, DLL innej firmy, Połączony dostawca serwerów, który jest inny niż Microsoft (jak MySQL.PostgreSQL itp.) Lub dowolna biblioteka DLL załadowana w przestrzeni adresowej SQL Server, która nie jest SQL Server, jest przydzielana poza maksymalną pamięcią serwera. Operacja tworzenia kopii zapasowych IIRC w programie SQL Server 2012 nadal ma przydzieloną pamięć poza pulą buforów.
Czy używasz połączonego serwera do wysyłania zapytań do innych RDBMS? Wszelkie inne oprogramowanie zainstalowane na tym samym komputerze z systemem Windows. Czy możesz opublikować w jakiejś wspólnej lokalizacji wynik następujących zapytań
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
Czy możesz również przesłać pełne DBCC MMEMORYSTATUS
dane wyjściowe do udostępnionej lokalizacji i opublikować link tutaj. Pomogłoby to zrozumieć, który składnik zajmuje pamięć
Edycja: Zgodnie z danymi wyjściowymi memorystatus dbcc widzę 2 węzły NUMA, a pamięć wykorzystywana przez każdy węzeł wynosi około
Node 1 : VM Committed 33554380
Node 2: VM Committed 33554420
Total is approx 64 G.
Znowu, jeśli widzisz Memory Manager w memorystatus wyprowadza go
Memory Manager KB
---------------------------------------- -----------
VM Reserved 260726964
VM Committed **67108820**
Zatwierdzona maszyna wirtualna jest faktycznie pamięcią wirtualną zatwierdzoną przez program SQL Server, a ponieważ pamięć ta została zatwierdzona, tak się stało physical memory backing it
. To znowu sprawia, że myślę, że SQL Server używa 65 G ustawionego w maksymalnej pamięci serwera
To jest maksymalna pamięć serwera. Więc pamięć jest dobrze rozdzielona między oba węzły. Możesz również dodać dane wyjściowe poniżej zapytania jutro, aby sprawdzić. Dodaj zrzut ekranu
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;
?