Dlaczego SQL Server 2012 Express używa 9,5 GB pamięci RAM na moim serwerze?

22

Tworzę aplikację, w której planuję osadzić SQL Server 2012 Express jako podstawowy magazyn danych. Podczas testowania na moim komputerze programistycznym (Win7-32 ​​z 3 GB pamięci RAM) nigdy nie zauważyłem sqlservr.exe, aby proces zużywał więcej niż 1 GB pamięci RAM, jak można się spodziewać po opublikowanych limitach skalowania sprzętowego dla wersji Express programu SQL Server.

Następnie przeniosłem moją aplikację na maszynę klasy serwerowej (Win Server 2008R2 64-bit z 16 GB pamięci RAM), aby ocenić jej wydajność. Zaskoczyło mnie, że sqlservr.exeproces szybko rozszerzył się do około 9,5 GB pamięci RAM i pozostał tam.

Ponownie uruchomiłem go kilka razy, aby zobaczyć, czy to przyniesie jakiś efekt, ale za każdym razem proces szybko wracał do ~ 9,5 GB. Teraz z pewnością cieszę się, że SQL Server Express korzysta z mojej pamięci RAM, ale chciałbym wiedzieć, czy jest to oczekiwane zachowanie, aby nie polegać na poziomach wydajności opartych na niewłaściwym użyciu pamięci RAM.

FYI, zgodnie z wersją SQL Server na moim serwerze SELECT @@VERSION, jest:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Mój numer 9,5 GB pochodzi z numeru „Prywatny zestaw roboczy” w Menedżerze zadań. Pierwsza tabela danych wyjściowych DBCC memorystatus(choć na bezczynnym serwerze) znajduje się poniżej:

PROCESS/SYSTEM COUNTS
Available Physical Memory   5543616512
Available Virtual Memory    8734902411264
Available Paging File       22471094272
Working Set                 9664200704
Percent of Committed Memory in WS   99
Page Faults                 2627510
System physical memory high 1
System physical memory low  0
Process physical memory low 0
Process virtual memory low  0

Dane wyjściowe z sugerowanego zapytania spaghettidba w sprawie sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

plus ~ 10 więcej mniejszych wpisów, których suma jest mniejsza niż 30 MB.

Dan
źródło

Odpowiedzi:

12

SQL Express jest ograniczony do 1 GB dla puli buforów, ale istnieje wiele innych pul pamięci w SQL Server. Zaskakujące jest dla mnie nadmierne użycie pul pamięci innych niż bufory. Aby dowiedzieć się o zużyciu pamięci na jednego pracownika pamięci, uruchom to:

SELECT type, SUM(pages_kb)/1024 AS MemoryMB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY 2 DESC

Mam nadzieję że to pomoże

spaghettidba
źródło
Dane wyjściowe z tego zapytania są następujące: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 a następnie kilka innych małych, których suma wynosi <30 MB. Wydaje mi się to dziwne. -arg- przy formatowaniu komentarza.
Dan
Hmmm. Sam MEMORYCLERK_SQLBUFFERPOOL przekracza limit 1 GB, więc możemy napotkać błąd. To, co wydaje mi się dziwne, to sposób, w jaki używa 9,5 GB bez wyświetlania go w zapytaniu.
spaghettidba
Myślę, że w sys.dm_os_memory_clerks są inne ciekawe kolumny (oprócz single_pages_kb): virtual_memory_committed_kb wydaje się bardziej odpowiednie w przypadku MEMORYCLERK_SQLBUFFERPOOL.
Razvan Socol,