Home > MSSQL > 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)

Categories: MSSQL Tags:
  1. No comments yet.
  1. No trackbacks yet.
You must be logged in to post a comment.