博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLSERVER中查看谁占用了Buffer Pool
阅读量:5052 次
发布时间:2019-06-12

本文共 2309 字,大约阅读时间需要 7 分钟。

使用动态视图: sys.dm_os_buffer_descriptors

这个视图返回一个8K data page的下列属性:

(1)该页属于哪个数据库

 

(2)该页属于数据库哪个文件

 

(3)该页的Page_ID

 

(4)该页的类型。可以根据这个来判断此页时索引页还是数据页

 

(5)该页内有多少行数据

 

(6)该页有多少可用空间。

 

(7)该页从磁盘读取以来是否修改过。

 

1.buffer pool的内存主要由哪个数据库占用的:

SELECT count(*)*8  as cached_pages_kb,CASE database_id        WHEN 32767 THEN ‘ResourceDb’        ELSE db_name(database_id)        END AS Database_nameFROM sys.dm_os_buffer_descriptorsGROUP BY db_name(database_id) ,database_idORDER BY cached_pages_kb DESC;
View Code

从上面的结果可以看到数据库AdventureWorks占用了大概30MB左右的缓冲池空间。

 2.当前库哪个表占用的最多:

SELECT count(*)*8 AS cached_pages_kb    ,obj.name ,obj.index_id,b.type_desc,b.nameFROM 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_id                    AND (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_descORDER BY cached_pages_kb DESC;
View Code

从上面的结果可以看到表Individual 在Pool内存里面缓冲最多,可能这个就是经常访问的热表,或者是比较大的表。注意Pool里面的缓冲页是经常变化的。 你如果再跑一次语句,出现在头条的可能是另外一个表了。

3.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_nameFROM sys.dm_os_buffer_descriptors aGROUP BY db_name(database_id) ,database_idORDER BY cached_pages_kb DESC;
View Code

从上面的结果可以看到,AdventureWorks数据库大概有13.84%的数据是修改过的。如果一个数据库的大部分(超过80% 是修改过的,那么这个数据库写操作非常多。反之如果这个比例接近0,那么该数据库的活动几乎是只读的。

 

(此文为转载)

转载于:https://www.cnblogs.com/flytosky-xy/p/7160743.html

你可能感兴趣的文章
一个小的日常实践——高速Fibonacci数算法
查看>>
机器学些技法(9)--Decision Tree
查看>>
drf权限组件
查看>>
输入月份和日期,得出是今年第几天
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>