Узнайте, какая база данных в SQL Server 2005 использует объем оперативной памяти

12

Мой друг спросил меня сегодня (пытаясь успокоить взволнованного клиента), как вы могли узнать в SQL Server 2005, какая база данных использует сколько памяти (в оперативной памяти сервера) в любой момент времени.

Это вообще возможно? Если так - как? Вы можете сделать это с помощью встроенных инструментов SQL Server, или вам нужны дополнительные сторонние опции?

Его клиент был взволнован, потому что его выделенный компьютер с SQL Server неожиданно использовал все, кроме 200 КБ, из 4 ГБ ОЗУ. Я не думаю, что это на самом деле проблема - но так как этот парень утверждает, что это произошло более или менее за ночь, он хочет знать, что вызвало такое увеличение использования памяти .....

Марк

marc_s
источник

Ответы:

25

Скорее всего, это вызвано запросом, желающим прочитать больше страниц в буферный пул, и буферный пул захватывает больше памяти, чтобы приспособиться к этому. Вот как SQL Server должен работать. Если ящик испытывает нехватку памяти, он попросит SQL Server освободить часть памяти, что он и сделает. Клиент не должен быть обеспокоен.

Вы можете использовать DMV, sys.dm_os_buffer_descriptorsчтобы увидеть, какой объем памяти буферного пула используется какой базой данных. Этот фрагмент расскажет вам, сколько чистых и грязных (измененных с момента последней контрольной точки или чтения с диска) страниц из каждой базы данных находятся в пуле буферов. Вы можете изменить дальше.

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

Я объясню это немного подробнее в этой записи блога Inside the Storage Engine: Что находится в пуле буферов?

Вы также можете проверить KB 907877 ( Как использовать команду DBCC MEMORYSTATUS для мониторинга использования памяти в SQL Server 2005 ), которая даст вам представление о разбивке остальной части использования памяти SQL Server (но не для каждой базы данных).

Надеюсь это поможет!

Пол Рэндал
источник
Ты гений, Пол!
marc_s
2

Ваш друг также может ограничить объем оперативной памяти, которую займет SQL, потому что, как утверждает Пол, SQL будет занимать каждый бит памяти.

Ограничьте объем памяти, занимаемый SQL Server, до 2000 Мб (или как вам лучше).

--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
Дейв
источник
Спасибо - я знал, как ограничить память, но я не знал, как определить, какая база данных использует сколько памяти пула буферов в любой момент времени.
marc_s