Дізнайтеся, яка база даних в SQL Server 2005 використовує скільки оперативної пам’яті


12

Сегодня мій друг запитав мене (намагаючись заспокоїти його схвильованого клієнта), як у SQL Server 2005 можна дізнатися, яка база даних використовує об'єм пам’яті (в оперативній пам'яті сервера) в будь-який момент часу.

Це взагалі можливо? Якщо так - як? Чи можете ви це зробити за допомогою вбудованих інструментів SQL Server або вам потрібні додаткові сторонні опції?

Його клієнт був увесь у захваті, оскільки його спеціалізована машина SQL Server раптом використовує всі, крім 200 КБ, 4 Гб оперативної пам’яті. Насправді я не думаю, що це проблема - але, оскільки цей хлопець стверджує, що це сталося більш-менш за ніч, він хоче знати, що спричинило це збільшення використання пам'яті .....

Марк

Відповіді:


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

Дякую - я знав, як обмежити пам'ять, але не знав, як дізнатись, який db використовує кількість буферної пам'яті в будь-який момент часу.
marc_s
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.