1. 程式人生 > >讓天下沒有難用的資料庫 » MSSQL中統計每個DB所佔用的記憶體

讓天下沒有難用的資料庫 » 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
   (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

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)