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.
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