12 votos

Descubrir la base de datos en SQL Server 2005 usa cuánta RAM

Un amigo mío me preguntó hoy (tratando de calmarse un agitado cliente suyo) ¿cómo usted podría encontrar en SQL Server 2005 base de datos que utiliza la cantidad de memoria (en el servidor de la RAM que es) en cualquier momento dado.

Es eso posible? Si es así, ¿cómo? Puedes hacer esto con construido-en las herramientas de SQL Server, o si necesita más opciones de terceros?

Su cliente estaba todo nervioso porque su dedicado equipo de SQL Server de repente utiliza todos, pero a 200 kb de sus 4 GB de RAM. Yo no creo que esto es un problema, en realidad -, pero ya que este tipo de reclamos que pasó más o menos durante la noche, él quiere saber cuál es la causa de este aumento en el uso de la memoria.....

Marc

25voto

Bernie Perez Puntos 5091

Era más probable que sea causado por una consulta con ganas de leer más páginas en el grupo de búfer, y el grupo de búferes de acaparamiento de más memoria para acomodar eso. Esta es la forma en que SQL Server se supone que funciona. Si el cuadro de las experiencias de la presión de memoria, se le pedirá SQL Server para dar algo de memoria, que se va a hacer. El cliente no debería estar preocupado.

Usted puede utilizar el DMV sys.dm_os_buffer_descriptors ver cómo gran parte de la memoria de grupo de búfer está siendo utilizado por la base de datos. Este fragmento nos dirá cuántas limpio y sucio (modificado desde el último punto de control o de lectura de disco) de las páginas de cada base de datos se encuentran en el grupo de búferes. Usted puede modificar aún 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

Voy a explicar esto un poco más en este blog en el Interior del Motor de Almacenamiento: ¿Qué hay en el buffer pool?

Usted también podría checkout KB 907877 (Cómo utilizar el comando DBCC MEMORYSTATUS para supervisar el uso de memoria en SQL Server 2005), el cual le dará una idea de la ruptura del resto de SQL Server uso de la memoria (pero no por base de datos).

Espero que esto ayude!

2voto

Dave Puntos 217

Tu amigo también puede limitar la cantidad de RAM que SQL llevará porque, como afirma Paul arriba, SQL llevará cada pedacito de memoria que puede.

Limitar la cantidad de memoria tomada por SQL Server 2000 MB (o lo que creas que es 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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: