您的位置:首页 > 数据库

SQL SERVER实际应用--谁动用了我的缓存

2012-01-10 14:31 260 查看
--查看当前缓存中哪些数据库占用了大量的资源

SELECT count(*)*8 as cached_pages_kb,CASE database_id

WHEN 32767 THEN 'ResourceDb'

ELSE db_name(database_id)

END AS Database_name

FROM sys.dm_os_buffer_descriptors

GROUP BY db_name(database_id) ,database_id

ORDER BY cached_pages_kb DESC;

--查看当前缓存中某个数据库下哪些表占用了大量的资源

SELECT count(*)*8 AS cached_pages_kb,obj.name ,obj.index_id,b.type_desc,b.name

FROM sys.dm_os_buffer_descriptors AS bd

INNER JOIN

(

SELECT object_name(object_id) AS name,index_id ,allocation_unit_id,object_id

FROM sys.allocation_units AS au

INNER JOIN sys.partitions AS p

ON au.container_id = p.hobt_idAND (au.type = 1 OR au.type = 3

   )

UNION ALL

SELECT object_name(object_id) AS name ,index_id, allocation_unit_id,object_id

FROM sys.allocation_units AS au

INNER JOIN sys.partitions AS p

ON au.container_id = p.partition_id AND au.type = 2

) AS obj

ON bd.allocation_unit_id = obj.allocation_unit_id

LEFT JOIN sys.indexes b on b.object_id = obj.object_id AND b.index_id = obj.index_id

WHERE database_id = db_id()

GROUP BY obj.name, obj.index_id ,b.name,b.type_desc

ORDER BY cached_pages_kb DESC;

--Buffer Pool缓冲池里面修改过的页总数大小。这个比较容易:

SELECT count(*)*8 as cached_pages_kb,convert(varchar(5),convert(decimal(5,2),(100-1.0*(select count(*) from sys.dm_os_buffer_descriptors b where b.database_id=a.database_id and is_modified=0)/count(*)*100.0)))+'%' modified_percentage ,CASE database_id WHEN 32767 THEN 'ResourceDb' ELSE db_name(database_id) END AS Database_name

FROM sys.dm_os_buffer_descriptors a

GROUP BY db_name(database_id) ,database_id

ORDER BY cached_pages_kb DESC;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: