web-dev-qa-db-fra.com

Pourquoi SQL Server 2012 Express utilise-t-il 9,5 Go de RAM sur mon serveur?

Je crée une application dans laquelle j'ai l'intention d'incorporer SQL Server 2012 Express en tant que banque de données principale. Lors des tests sur ma machine de développement (Win7-32 ​​avec 3 Go de RAM), je n'ai jamais observé le processus sqlservr.exe Pour utiliser plus de 1 Go de RAM comme je m'y attendais de la publication mise à l'échelle matérielle limites pour l'édition Express de SQL Server.

J'ai ensuite déplacé mon application vers une machine de niveau serveur (Win Server 2008R2 64 bits avec 16 Go de RAM) pour évaluer ses performances et j'ai été surpris de constater que le processus sqlservr.exe S'est rapidement étendu à environ 9,5 Go de RAM et y est resté.

Je l'ai redémarré plusieurs fois pour voir si cela aurait un effet, mais à chaque fois, le processus est rapidement revenu à ~ 9,5 Go. Maintenant, je suis certainement heureux que SQL Server Express utilise ma RAM, mais je voudrais savoir si c'est un comportement attendu afin de ne pas compter sur des niveaux de performances basés sur l'utilisation de RAM qui est Incorrect.

Pour info, la version de SQL Server sur ma machine serveur, selon SELECT @@VERSION, Est:

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)

Mon numéro de 9,5 Go provenait du numéro "Private Working Set" dans le Gestionnaire des tâches. Le premier tableau de sortie de DBCC memorystatus (Quoique sur un serveur maintenant inactif) est ci-dessous:

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

Sortie de la requête suggérée de spaghettidba sur sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

plus ~ 10 entrées plus petites qui totalisent moins de 30 Mo.

22
Dan

SQL Express est limité à 1 Go pour le pool de tampons, mais il existe de nombreux autres pools de mémoire dans SQL Server. Ce que je trouve surprenant, c'est l'utilisation excessive de pools de mémoire non tampon. Pour connaître l'utilisation de la mémoire par commis de mémoire, exécutez ceci:

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

J'espère que cela t'aides

12
spaghettidba