Finden Sie heraus, welche Datenbank in SQL Server 2005 wie viel RAM verwendet

12

Ein Freund von mir hat mich heute gefragt (und versucht, einen aufgeregten Kunden zu beruhigen), wie Sie in SQL Server 2005 herausfinden können, welche Datenbank wie viel Speicher (im RAM des Servers) zu einem bestimmten Zeitpunkt belegt.

Ist das überhaupt möglich Wenn das so ist, wie? Können Sie dies mit integrierten SQL Server-Tools tun oder benötigen Sie zusätzliche Optionen von Drittanbietern?

Sein Kunde war völlig durcheinander, weil sein dedizierter SQL Server-Computer plötzlich alle 4 GB RAM außer 200 KB belegt. Ich glaube nicht, dass dies wirklich ein Problem ist - aber da dieser Typ behauptet, dass es mehr oder weniger über Nacht passiert ist, möchte er wissen, was diese Zunahme der Speichernutzung verursacht hat ...

Marc

marc_s
quelle

Antworten:

25

Dies wurde höchstwahrscheinlich durch eine Abfrage verursacht, die mehr Seiten in den Pufferpool lesen wollte, und der Pufferpool hat mehr Speicher abgerufen, um dies unterzubringen. So soll SQL Server funktionieren. Wenn die Box unter Speicherdruck steht, fordert sie SQL Server auf, Speicherplatz freizugeben. Der Kunde sollte nicht betroffen sein.

Sie können die DMV verwenden , sys.dm_os_buffer_descriptorsum zu sehen , wie viel von dem Pufferpool Speicher wird durch die Datenbank verwendet wird. Dieses Snippet gibt an, wie viele saubere und fehlerhafte (seit dem letzten Checkpoint geänderte oder von der Festplatte gelesene) Seiten aus jeder Datenbank im Pufferpool vorhanden sind. Sie können weiter modifizieren.

SELECT
   (CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State',
   (CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
   COUNT (*) AS 'Page Count'
FROM sys.dm_os_buffer_descriptors
   GROUP BY [database_id], [is_modified]
   ORDER BY [database_id], [is_modified];
GO

Ich erkläre dies in diesem Blogeintrag ein wenig genauer. Inside the Storage Engine: Was ist im Pufferpool?

Sie können auch KB 907877 ( Verwenden des Befehls DBCC MEMORYSTATUS zum Überwachen der Speichernutzung unter SQL Server 2005 ) auschecken, um eine Vorstellung von der Aufteilung der restlichen Speichernutzung von SQL Server (jedoch nicht pro Datenbank) zu erhalten.

Hoffe das hilft!

Paul Randal
quelle
Du bist ein Genie, Paul!
marc_s
2

Ihr Freund kann auch die Größe des Arbeitsspeichers begrenzen, den SQL benötigt, da SQL, wie Paul oben ausführt, jede Menge Arbeitsspeicher beansprucht.

Begrenzen Sie den von SQL Server belegten Speicher auf 2000 MB (oder was auch immer Sie für am besten halten).

--Enable advanced options:
USE master
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE

--Set the maximum amount of memory to 2000 MB:
USE master
EXEC sp_configure 'max server memory (MB)', 2000
RECONFIGURE WITH OVERRIDE

--Display the newly set configuration:
USE master
EXEC sp_configure 'max server memory (MB)'

--Set 'show advanced options' back to default:
USE master
EXEC sp_configure 'show advanced options', 0 
RECONFIGURE WITH OVERRIDE
Dave
quelle
Danke - Ich wusste, wie man den Speicher begrenzt, aber ich wusste nicht, wie man herausfindet, welche Datenbank wie viel Pufferpoolspeicher zu einem bestimmten Zeitpunkt verwendet.
marc_s