Sql-Server
找出 SQL Server 2005 中的哪個數據庫使用了多少 RAM
我的一個朋友今天問我(試圖讓他的一個激動的客戶平靜下來)如何在 SQL Server 2005 中找出在任何給定時間哪個數據庫使用了多少記憶體(在伺服器的 RAM 中)。
這有可能嗎?如果是這樣 - 如何?您可以使用內置 SQL Server 工具執行此操作,還是需要額外的第三方選項?
他的客戶非常慌張,因為他的專用 SQL Server 機器突然使用了 4 GB RAM 中的 200KB。我不認為這是一個問題,真的 - 但是由於這個人聲稱它或多或少發生在晚上,他想知道是什麼導致了記憶體使用量的增加……
馬克
這很可能是由於一個查詢想要將更多頁面讀入緩衝池,而緩衝池佔用了更多記憶體來容納它。這就是 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 其餘記憶體使用情況(但不是每個數據庫)的細分。
希望這可以幫助!