Descubra qual banco de dados no SQL Server 2005 usa quanta RAM

12

Um amigo meu me perguntou hoje (tentando acalmar um cliente agitado dele) como você poderia descobrir no SQL Server 2005 qual banco de dados usa quanta memória (na RAM do servidor) a qualquer momento. / p>

Isso é possível? Se sim, como? Você pode fazer isso com ferramentas internas do SQL Server ou precisa de opções extras de terceiros?

Seu cliente ficou confuso porque sua máquina dedicada do SQL Server de repente usa todos menos 200 KB de seus 4 GB de RAM. Eu não acho que isso é um problema, realmente - mas desde que esse cara afirma que aconteceu mais ou menos durante a noite, ele quer saber o que causou esse aumento no uso da memória .....

Marc

    
por marc_s 11.06.2009 / 13:48

2 respostas

25

O mais provável é que tenha sido causado por uma consulta que deseja ler mais páginas no buffer pool e que o buffer pool obtenha mais memória para acomodar isso. É assim que o SQL Server deve funcionar. Se a caixa sofrer pressão de memória, ela solicitará ao SQL Server que desista de alguma memória, o que ela fará. O cliente não deve se preocupar.

Você pode usar o DMV sys.dm_os_buffer_descriptors para ver quanto da memória do buffer pool está sendo usada por qual banco de dados. Esse snippet informará quantas páginas limpas e sujas (modificadas desde o último ponto de verificação ou lidas do disco) de cada banco de dados estão no buffer pool. Você pode modificar mais.

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

Eu explico isso um pouco mais neste post de blog Dentro do Mecanismo de Armazenamento: O que há no buffer pool?

Você também pode fazer o checkout em KB 907877 ( Como usar o comando DBCC MEMORYSTATUS para monitorar o uso da memória no SQL Server 2005 ) que lhe dará uma idéia da divisão do restante do uso de memória do SQL Server (mas não por banco de dados).

Espero que isso ajude!

    
por 11.06.2009 / 13:59
2

Seu amigo também pode limitar a quantidade de RAM que o SQL irá tomar, porque, como o Paul declara acima, o SQL vai usar toda a memória possível.

Limite a quantidade de memória usada pelo SQL Server para 2000 Mb (ou o que você achar melhor).

--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
    
por 11.06.2009 / 14:07