Dowiedz się, która baza danych w SQL Server 2005 wykorzystuje ilość pamięci RAM

12

Mój przyjaciel zapytał mnie dzisiaj (próbując uspokoić swojego wzburzonego klienta), w jaki sposób można dowiedzieć się w SQL Server 2005, która baza danych zużywa tyle pamięci (w pamięci RAM serwera) w danym momencie.

Czy to w ogóle możliwe? Jeśli tak to jak? Czy możesz to zrobić za pomocą wbudowanych narzędzi SQL Server, czy potrzebujesz dodatkowych opcji innych firm?

Jego klient był zdenerwowany, ponieważ jego dedykowana maszyna SQL Server nagle zużyła prawie 200 KB z 4 GB pamięci RAM. Nie sądzę, żeby to był problem, ale skoro ten facet twierdzi, że stało się to mniej więcej w nocy, chce wiedzieć, co spowodowało wzrost wykorzystania pamięci .....

Marc

marc_s
źródło

Odpowiedzi:

25

Najprawdopodobniej było to spowodowane zapytaniem, które chce wczytać więcej stron do puli buforów, a pula buforów pobiera więcej pamięci, aby to pomieścić. Tak powinien działać SQL Server. Jeśli pudełko doświadcza presji pamięci, poprosi SQL Server o rezygnację z pamięci, co zrobi. Klient nie powinien się martwić.

Za pomocą DMV sys.dm_os_buffer_descriptorsmożna sprawdzić, ile pamięci puli buforów jest wykorzystywane przez bazę danych. Ten fragment powie ci, ile czystych i brudnych (zmodyfikowanych od ostatniego punktu kontrolnego lub odczytu z dysku) stron z każdej bazy danych znajduje się w puli buforów. Możesz dalej modyfikować.

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

Wyjaśnię to nieco więcej w tym poście na blogu Inside the Storage Engine: Co znajduje się w puli buforów?

Możesz także pobrać KB 907877 ( Jak użyć komendy DBCC MEMORYSTATUS do monitorowania użycia pamięci w SQL Server 2005 ), co da ci wyobrażenie o podziale pozostałego zużycia pamięci przez SQL Server (ale nie na bazę danych).

Mam nadzieję że to pomoże!

Paul Randal
źródło
Jesteś geniuszem, Paul!
marc_s
2

Twój przyjaciel może również ograniczyć ilość pamięci RAM, którą zajmie SQL, ponieważ, jak twierdzi Paul powyżej, SQL zajmie każdą możliwą pamięć.

Ogranicz ilość pamięci zajętej przez SQL Server do 2000 Mb (lub cokolwiek, co uważasz za najlepsze).

--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
Dave
źródło
Dzięki - wiedziałem, jak ograniczyć pamięć, ale nie wiedziałem, jak dowiedzieć się, która baza danych korzysta z ilości pamięci puli buforów w danym momencie.
marc_s