Perché SQL Server 2012 Express utilizza 9.5 GB di RAM sul mio server?


22

Sto creando un'applicazione in cui prevedo di incorporare SQL Server 2012 Express come archivio dati principale. Durante i test sulla mia macchina di sviluppo (Win7-32 ​​con 3 GB di RAM), non ho mai osservato il sqlservr.exeprocesso di utilizzare più di 1 GB di RAM come mi aspetterei dai limiti di ridimensionamento hardware pubblicati per l'edizione Express di SQL Server.

Ho quindi spostato la mia applicazione su una macchina di livello server (Win Server 2008R2 a 64 bit con 16 GB di RAM) per valutarne le prestazioni e sono rimasto sorpreso di scoprire che il sqlservr.exeprocesso si è rapidamente esteso a circa 9,5 GB di RAM e vi è rimasto.

L'ho riavviato un paio di volte per vedere se ciò avrebbe avuto qualche effetto, ma ogni volta il processo è tornato rapidamente a ~ 9,5 GB. Ora sono certamente lieto che SQL Server Express utilizzi la mia RAM, ma vorrei sapere se si tratta di un comportamento previsto in modo da non fare affidamento su livelli di prestazioni basati su un utilizzo della RAM errato.

Cordiali saluti, la versione di SQL Server sul mio computer server, secondo SELECT @@VERSION, è:

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)

Il mio numero da 9,5 GB proveniva dal numero "Set di lavoro privato" in Task Manager. La prima tabella di output da DBCC memorystatus(anche se su un server ora inattivo) è di seguito:

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

Output della query suggerita da spaghettidba su sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

più ~ 10 voci più piccole che si sommano a meno di 30 MB.

Risposte:


12

SQL Express è limitato a 1 GB per il pool di buffer, ma ci sono molti altri pool di memoria in SQL Server. Quello che trovo sorprendente è l'uso eccessivo di pool di memoria non buffer. Per scoprire l'utilizzo della memoria per impiegato di memoria, eseguire questo:

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

Spero che sia di aiuto


L'output di quella query è: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 E poi alcuni più piccoli che si sommano a <30 MB. Mi sembra strano. -arg- alla formattazione del commento.
Dan,

Hmmm. MEMORYCLERK_SQLBUFFERPOOL da solo supera il limite di 1 GB, quindi potremmo trovarci ad affrontare un bug. Quello che trovo strano è come sta usando 9,5 GB senza mostrarlo nella query.
spaghettidba,

Penso che ci siano altre colonne interessanti in sys.dm_os_memory_clerks (accanto a single_pages_kb): virtual_memory_committed_kb sembra più rilevante nel caso di MEMORYCLERK_SQLBUFFERPOOL.
Razvan Socol,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.