首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >七、内存优化(3)使用DMV

七、内存优化(3)使用DMV

作者头像
py3study
发布2020-01-14 15:51:09
6320
发布2020-01-14 15:51:09
举报
文章被收录于专栏:python3python3

一、sys.dm_os_memory_clerks

1. 查询DMV

sys.dm_os_memory_clerks返回SQL Server实例中当前处于活动状态的全部内存Clerk的集合。跟踪这个DMV,可以看到内存是如何被SQL Server消耗。

select type, sum(virtual_memory_reserved_kb) as virtual_memory_reserved_sum,sum(virtual_memory_committed_kb) as virtual_memory_committed_sum,sum(awe_allocated_kb) as awe_allocated_sum,sum(shared_memory_reserved_kb) as shared_memory_reserved_sum,sum(shared_memory_committed_kb) as shared_memory_committed_sum,sum(multi_pages_kb) as multi_pages_sum,sum(single_pages_kb) as single_pages_sumfrom sys.dm_os_memory_clerks group by type order by type

2. 各列的解释

(1)Type

  Momery Clerk的名称。大致可以根据名称猜出内存的用途。

(2)virtual_memory_reserved_sum 和 virtual_memory_committed_sum

virtual_memory_reserved_sum 是内存Clerk Reserve的虚拟内存量。这是由使用此Clerk的组件直接保留的内存量。在多数情况下,只有使用Buffer Pool的内存Clerk才会有这种机制。

virtual_memory_committed_sum 是内存Clerk Commit的虚拟内存量。这是Clerk提交的内存量。提交的内存量应始终小于保留的内存量。这部分内存,主要来自Database Pages。

(3)awe_allocated_sum

  内存Clerk使用AWE分配的内存量。

(4)shared_memory_reserved_sum 和 shared_memory_committed_sum

shared_memory_reserved_sum 是内存Clerk保留的共享内存量。保留以供共享内存和文件映射使用的内存量。

shared_memory_committed_sum 是内存Clerk提交的共享内存量。

  这2个列的值,可以追踪Shared Memory的大小。一般Shared Memory的值都很小。

(5)multi_pages_sum 和 single_pages_sum

multi_pages_sum 是分配的多页内存量。此内存在缓冲池外面分配,也就是传统意义上SQL Server自己的代码使用的Multi-Page的大小。

  single_pages_sum 是通过Stolen Page分配的单页内存量。也就是说,是Buffer Pool里的Stolen Memory的大小。

3. 估算不同内存的大小

(1)Reserved 和 Commit

  即 sum(virtual_memory_reserved_kb) 和 sum(virtual_memory_committed_kb) 。

(2)Stolen

  等于 sum(single_pages_kb) + sum(multi_pages_kb)

(3)Buffer Pool(Single Page)

  等于 sum(virtual_memory_committed_kb) + sum(single_pages_kb)

(4)Multi-Page

  即 sum(multi_pages_kb)

4. 局限性

  通过这个DMV可以看到所有Buffer Pool(或者称为Single Page)的使用,以及Multi-Page里被SQL Server代码用掉的内存。运行在Multi-Page里面的第三方代码所申请的内存是不能被这个视图跟踪的。

二、查看SQL Server缓存的数据页面信息

  通过sys.dm_os_buffer_descriptors,可以查看SQL Server缓冲池中当前所有数据页的信息。

use db01select b.database_id ,db=DB_NAME(b.database_id) , p.object_id , p.index_id , buffer_count = COUNT(*) from sys.allocation_units a,sys.dm_os_buffer_descriptors b, sys.partitions pwhere a.allocation_unit_id = b.allocation_unit_id and a.container_id = p.hobt_id and b.database_id = DB_ID()group by b.database_id ,p.object_id ,p.index_id order by b.database_id , buffer_count desc

三、查看SQL Server缓存的执行计划信息

  可以通过sys.dm_exec_cached_plans查看执行计划都缓存了哪些内容。

select cacheobjtype,objtype from sys.dm_exec_cached_plans group by cacheobjtype,objtype

  通常缓存的执行计划的对象有:Proc(存储过程)、Prepared(预定义语句)、Adhoc(动态查询)、ReplProc(复制筛选过程)、Trigger、View、Default(默认值)、UsrTab(用户表)、SysTab(系统表)、Check(Check约束)、Rule(规则)等。

  通过下面的查询,可以看到各种对象占用了多少内存。

select cacheobjtype,objtype, sum(size_in_bytes) as sum_size_in_bytes,sum(bucketid) as cache_counts from sys.dm_exec_cached_plans group by cacheobjtype,objtype

本文结语

  通过DMV查看的消耗情况,以及缓存的信息。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档