Descubra qué base de datos en SQL Server 2005 usa la cantidad de RAM


12

Un amigo mío me preguntó hoy (tratando de calmar a un cliente suyo agitado) cómo podría averiguar en SQL Server 2005 qué base de datos usa cuánta memoria (en la RAM del servidor) en un momento dado.

¿Es eso posible? ¿Si es así, cómo? ¿Puede hacer esto con las herramientas incorporadas de SQL Server o necesita opciones adicionales de terceros?

Su cliente estaba nervioso porque su máquina dedicada SQL Server de repente usa todos menos 200 KB de sus 4 GB de RAM. Realmente no creo que sea un problema, pero como este tipo afirma que sucedió más o menos durante la noche, quiere saber qué causó este aumento en el uso de la memoria .....

Bagazo

Respuestas:


25

Probablemente fue causado por una consulta que deseaba leer más páginas en el grupo de búferes, y el grupo de búferes tomaba más memoria para acomodar eso. Así es como se supone que funciona SQL Server. Si la caja experimenta presión de memoria, le pedirá a SQL Server que renuncie a algo de memoria, lo que hará. El cliente no debe preocuparse.

Puede usar el DMV sys.dm_os_buffer_descriptorspara ver qué cantidad de memoria de la agrupación de almacenamiento intermedio está siendo utilizada por qué base de datos. Este fragmento le dirá cuántas páginas limpias y sucias (modificadas desde el último punto de control o leídas del disco) de cada base de datos están en el grupo de búferes. Puede modificar más.

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 explico un poco más en esta publicación de blog Inside the Storage Engine: ¿Qué hay en el grupo de búferes?

También puede consultar KB 907877 ( Cómo usar el comando DBCC MEMORYSTATUS para monitorear el uso de memoria en SQL Server 2005 ) que le dará una idea del desglose del resto del uso de memoria de SQL Server (pero no por base de datos).

¡Espero que esto ayude!


Eres un genio, Paul!
marc_s

2

Su amigo también puede limitar la cantidad de RAM que tomará SQL porque, como Paul afirma anteriormente, SQL tomará toda la memoria que pueda.

Limite la cantidad de memoria utilizada por SQL Server a 2000 Mb (o lo que considere mejor).

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

Gracias. Sabía cómo limitar la memoria, pero no sabía cómo averiguar qué base de datos está utilizando la cantidad de memoria de la agrupación de almacenamiento intermedio en un momento dado.
marc_s
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.