Arbeitsspeicheraufteilung je Datenbank

Es stellt sich immer wieder die Frage wie ist die Arbeitsspeicheraufteilung  bezogen auf die Datenbanken innerhalb einer Instanz.

Microsoft für das auslesen dieser Werte die Systemsicht sys.dm_os_buffer_description zur Verfügung. Mittels dieser Systemsicht, kann die Verteilung der Datenbankseiten (je 8 KB) im Pufferpool bestimmt werden. Anhand des Pufferpools kann dann ermittelt werden wie die Arbeitsspeicheraufteilung  aktuell ist.

Jede gelesene Datenseite wird in den SQL Server-Pufferpool kopiert und für die Verarbeitung zwischengespeichert.

SELECT
	(CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State / Seitenstatus',
	(CASE WHEN ([database_id] = 32767) THEN 'Ressourcendatenbank' ELSE DB_NAME (database_id) END) AS 'Datenbankname',
	COUNT (*)  AS 'Page COUNT / Seitenanzahl',
	(COUNT (*)*8/1024)  AS 'Arbeitsspeicheraufteilung in MB'
FROM 
	sys.dm_os_buffer_descriptors
GROUP BY 
	[database_id]
        ,[is_modified]
ORDER BY 
	(COUNT (*)*8/1024) DESC
GO

Die Unterscheidung zwischen Dirty – und dem Clean – Page State liegt darin, dass Dirty – Pages seit dem letzten lesen geändert wurden. Clean – Page bedeutet, dass diese Seiten seit dem letzten lesen nicht verändert wurden.
Die Arbeitsspeicheraufteilung  wird vor der Ausgabe noch in MB umgerechnet.

Mittles dieses Scriptes kann man die Arbeitsspeicherverteilung ermitteln. Das Ergebnis ist nach verwendetem Arbeitsspeicher absteigend sortiert.

Um diese Systemview ausführen zu dürfen benötigt man das Recht VIEW SERVER STATE auf dem Server.

Das könnte dich auch interessieren …