Scopri quale database in SQL Server 2005 utilizza quanta RAM


12

Un mio amico mi ha chiesto oggi (cercando di calmare un suo cliente agitato) come è possibile scoprire in SQL Server 2005 quale database utilizza quanta memoria (nella RAM del server) in un dato momento.

È possibile affatto? Se é cosi, come? Puoi farlo con gli strumenti di SQL Server integrati o hai bisogno di opzioni extra di terze parti?

Il suo cliente era completamente agitato perché la sua macchina SQL Server dedicata all'improvviso usa quasi tutti i 200 KB dei suoi 4 GB di RAM. Non penso che questo sia un problema, davvero - ma dal momento che questo ragazzo afferma che è successo più o meno durante la notte, vuole sapere cosa ha causato questo aumento dell'utilizzo della memoria .....

Marc

Risposte:


25

Molto probabilmente è stato causato da una query che voleva leggere più pagine nel pool di buffer, e il pool di buffer ha acquisito più memoria per adattarlo. Ecco come dovrebbe funzionare SQL Server. Se la casella rileva una pressione della memoria, chiederà a SQL Server di rinunciare alla memoria, cosa che farà. Il cliente non dovrebbe essere preoccupato.

È possibile utilizzare DMV sys.dm_os_buffer_descriptorsper vedere la quantità di memoria del pool buffer utilizzata da quale database. Questo frammento ti dirà quante pagine pulite e sporche (modificate dall'ultimo checkpoint o lette dal disco) di ciascun database si trovano nel pool di buffer. È possibile modificare ulteriormente.

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

Lo spiego un po 'di più in questo post sul blog Inside the Storage Engine: cosa c'è nel pool di buffer?

È inoltre possibile effettuare il checkout di KB 907877 ( Come utilizzare il comando DBCC MEMORYSTATUS per monitorare l'utilizzo della memoria su SQL Server 2005 ) che ti darà un'idea della suddivisione del resto dell'utilizzo della memoria di SQL Server (ma non per database).

Spero che sia di aiuto!


Sei un genio, Paul!
marc_s,

2

Il tuo amico può anche limitare la quantità di RAM che SQL prenderà perché, come afferma Paul sopra, SQL prenderà ogni bit di memoria che può.

Limitare la quantità di memoria occupata da SQL Server a 2000 Mb (o qualsiasi altra cosa riteniate migliore).

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

Grazie: ero consapevole di come limitare la memoria, ma non sapevo come scoprire quale db sta utilizzando la quantità di memoria del pool di buffer in un dato momento.
marc_s,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.