Warum verwendet SQL Server 2012 Express 9,5 GB RAM auf meinem Server?

22

Ich erstelle eine Anwendung, in die ich SQL Server 2012 Express als primären Datenspeicher einbetten möchte. Beim Testen auf meinem Entwicklungscomputer (Win7-32 ​​mit 3 GB RAM) habe ich nie beobachtet sqlservr.exe, dass mehr als 1 GB RAM verwendet werden, wie dies aufgrund der veröffentlichten Hardware-Skalierungsbeschränkungen für die Express Edition von SQL Server zu erwarten war .

Anschließend habe ich meine Anwendung auf einen Server-Computer (Win Server 2008R2 64-Bit mit 16 GB RAM) verschoben, um die Leistung dort zu bewerten. Ich war überrascht, dass der sqlservr.exeProzess schnell auf ca. 9,5 GB RAM erweitert wurde und dort blieb.

Ich habe es ein paar Mal neu gestartet, um festzustellen, ob dies Auswirkungen hat, aber jedes Mal kehrte der Prozess schnell auf ~ 9,5 GB zurück. Jetzt bin ich mit Sicherheit froh, dass SQL Server Express meinen Arbeitsspeicher verwendet, aber ich möchte wissen, ob dies das erwartete Verhalten ist, damit ich mich nicht auf Leistungsebenen verlasse, die auf einer falschen RAM-Auslastung basieren.

Zu Ihrer Information, die Version von SQL Server auf meinem Server-Computer SELECT @@VERSIONlautet laut :

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)

Meine 9,5 GB-Nummer stammt aus dem "Private Working Set" im Task-Manager. Die erste Tabelle der Ausgabe von DBCC memorystatus(wenn auch auf einem jetzt inaktiven Server) ist unten:

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

Ausgabe der von Spaghettidba vorgeschlagenen Abfrage zu sys.dm_os_memory_clerks:

MEMORYCLERK_SQLBUFFERPOOL   1410
OBJECTSTORE_LOCK_MANAGER    256
MEMORYCLERK_SQLCLR          38
MEMORYCLERK_SOSNODE         26
CACHESTORE_SQLCP            11

plus ~ 10 kleinere Einträge, die weniger als 30 MB ergeben.

Dan
quelle

Antworten:

12

SQL Express ist für den Pufferpool auf 1 GB beschränkt, es gibt jedoch viele andere Speicherpools in SQL Server. Was mich überrascht, ist die übermäßige Verwendung von nicht gepufferten Speicherpools. Führen Sie Folgendes aus, um die Speicherauslastung pro Mitarbeiter zu ermitteln:

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

Hoffe das hilft

Spaghettidba
quelle
Die Ausgabe dieser Abfrage lautet: MEMORYCLERK_SQLBUFFERPOOL 1410 OBJECTSTORE_LOCK_MANAGER 256 MEMORYCLERK_SQLCLR 38 MEMORYCLERK_SOSNODE 26 CACHESTORE_SQLCP 11 Und dann noch ein paar kleine, die sich zu <30 MB summieren. Kommt mir komisch vor. -arg- bei der Kommentarformatierung.
Dan
Hmmm. MEMORYCLERK_SQLBUFFERPOOL allein überschreitet die 1-GB-Grenze, sodass möglicherweise ein Fehler auftritt. Was ich seltsam finde, ist, wie es 9,5 GB verwendet, ohne dass es in der Abfrage angezeigt wird.
Spaghettidba
Ich denke, es gibt einige andere interessante Spalten in sys.dm_os_memory_clerks (neben single_pages_kb): virtual_memory_committed_kb scheint im Fall von MEMORYCLERK_SQLBUFFERPOOL relevanter zu sein.
Razvan Socol