Мой друг спросил меня сегодня (пытаясь успокоить своего взволнованного клиента), как можно узнать в SQL Server 2005, какая база данных использует, сколько памяти (в оперативной памяти сервера) в любой момент времени.
Это вообще возможно? Если да, то как? Можете ли вы сделать это с помощью встроенных инструментов SQL Server или вам нужны дополнительные сторонние опции?
Его клиент был очень взволнован, потому что его выделенная машина SQL Server внезапно использует все 4 ГБ оперативной памяти, кроме 200 КБ. На самом деле я не думаю, что это проблема - но поскольку этот парень утверждает, что это произошло более или менее за ночь, он хочет знать, что вызвало это увеличение использования памяти ...
Марк
Скорее всего, это было вызвано запросом, желающим прочитать больше страниц в пуле буферов, и пул буферов захватил больше памяти, чтобы разместить это. Вот как должен работать 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
Я объясню это немного подробнее в этом сообщении в блоге Внутри механизма хранения: что находится в пуле буферов?
Вы также можете проверить KB 907877 (Как использовать команду DBCC MEMORYSTATUS для отслеживания использования памяти в SQL Server 2005), что даст вам представление об остальной части использования памяти SQL Server (но не для каждой базы данных).
Надеюсь это поможет!
Ваш друг также может ограничить объем оперативной памяти, которую займет 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