讓天下沒有難用的資料庫 » MSSQL中統計每個DB所佔用的記憶體
使用者在使用RDS的時候,通常有這麼一個需求,就是要看看我的資料庫到底使用了多少的記憶體,比如使用者申請了一個4G規格的例項,然後在例項上建立了3個DB,那麼有沒有辦法得到每個DB所使用的記憶體?
在MSSQL的buffer pool中儲存了資料庫的索引和資料頁(dirty &clean),可以通過DMV sys.dm_os_buffer_descriptors
得到每個資料庫在buffer pool中使用了多少記憶體,這個檢視可以告訴你資料庫自上一次checkpoint後,有多少的clean和dirty的pages在資料庫的buffer pool中:
SELECT (CASEWHEN ([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] ORDERBY [database_id], [is_modified]; GO
Page State Database Name Page Count
———- ——————— ———–
Clean master 74
Dirty master 43
Clean tempdb 68
Dirty tempdb 49
Clean lgwdb1 47
Dirty lgwdb1 2
Clean Resource Database 365
上面lgwdb1為使用者資料庫,而master,tempdb, Resource Database 為系統資料庫(MSSQL預設的page size為8k)