首页 > 如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况

如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况

https://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx
  • 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。如果您发现了错误并希望帮助我们提高机器翻译技术,请完成文章末尾的在线调查。

查看原始的英语文章:907877

概要

本文讨论了 DBCC MEMORYSTATUS 命令的输出。 该命令通常用于诊断 Microsoft SQL Server 内存耗尽问题。



本文介绍输出的元素的内存管理器、 内存使用情况的摘要、 聚合内存信息、 缓冲区分配信息、 缓冲区池的信息,和过程高速缓存信息。有关全局内存对象、 有关查询内存对象、 优化,以及内存经纪人还介绍输出。

简介

DBCC MEMORYSTATUS 命令提供了 Microsoft SQL Server 的当前内存状态的快照。在 SQL Server 中的内存消耗问题进行故障排除或排除特定的内存不足错误,可以使用此命令的输出。(多出的内存错误自动打印错误日志中的此输出。Microsoft 客户支持服务还可能要求,运行此命令时在一个特定的支持事件过程中如果遇到错误,可能是与低内存条件相关联。



注意:性能监视器 (PerfMon) 和任务管理器不能说明内存正确如果启用地址窗口化扩展 (AWE) 支持。



本文介绍了一些可以从 DBCC MEMORYSTATUS 命令的输出中获取的数据。这篇文章的多个部分包括此处未介绍的专用实现详细信息。Microsoft 客户支持服务不会回答任何问题或提供有关含义的特定计数器超出本文中提供的信息的详细信息。

详细信息

重要:DBCC MEMORYSTATUS 命令旨在成为 Microsoft 客户支持服务的诊断工具。输出的格式和所提供的详细程度可能会有所 service pack 和产品版本之间的更改。DBCC MEMORYSTATUS 命令提供的功能可能会被以后的产品版本中的不同机制。因此,在以后的产品版本中,此命令可能不再起作用。之前该命令被更改或删除不会进行任何其他警告。因此,使用此命令的应用程序可能会中断且不发出警告。



DBCC MEMORYSTATUS 命令的输出已从 SQL Server 的早期版本。现在,则输出包含几个部分,在早期的产品版本中不可用。

内存管理器

输出的第一节是内存管理器。此部分显示了 SQL Server 的总内存消耗。
   Memory Manager                 KB    ------------------------------ --------------------


VM Reserved 1761400

VM Committed 1663556

AWE Allocated 0

Reserved Memory 1024

Reserved Memory In Use 0



(5 row(s) affected)
这一节中的元素如下所示︰
  • 虚拟机保留︰ 此值显示 SQL Server 保留的虚拟地址空间 (VAS) 的总数量。
  • 虚拟机已提交︰ 此值显示 SQL Server 已提交的 VAS 的总数量。提交的 VAS 已经与物理内存。
  • AWE 分配︰ 此值显示通过 AWE 机制在 32 位版本的 SQL Server 上分配的内存的总数量。或者,此值的显示在 64 位版本的产品使用锁定页面的内存的总数量。
  • 保留的内存︰ 此值显示为专用的管理员连接 (DAC) 保留的内存。


  • 使用保留内存︰ 此值显示正在使用保留的内存。

内存使用情况的摘要

内存管理器部分跟内存的每个节点的内存使用情况的摘要。在非统一内存访问 (NUMA) 启用系统中,都有相应的内存节点条目为每个硬件 NUMA 节点。在 SMP 系统中,将有一个单一的内存节点项。



注意:内存节点 ID 可能不对应硬件节点 id。
   Memory node Id = 0             KB    ------------------------------ --------------------


VM Reserved 1757304

VM Committed 1659612

AWE Allocated 0

MultiPage Allocator 10760

SinglePage Allocator 73832



(5 row(s) affected)
注意:这些值显示在此 NUMA 节点上正在运行的线程分配的内存。这些值不是 NUMA 节点的本地内存。



这一节中的元素如下所示︰
  • 虚拟机保留︰ 此值显示在此节点正在运行的线程保留 VAS。

  • 虚拟机已提交︰ 此值显示 VAS 提交的此节点运行的线程。
  • AWE 分配︰ 此值显示通过 AWE 机制在 32 位版本的产品分配的内存。或者,此值显示锁定的页上的 64 位版本的产品使用的内存的总数量。



    在 NUMA 启用系统中,此值可能不正确或负面。但是,内存管理器部分中的总体AWE 分配值是正确的值。若要跟踪单个 NUMA 节点分配的内存,使用SQL Server︰ 缓冲节点的性能对象。(有关详细信息,请参阅SQL Server 联机丛书。
  • 多页分配器︰ 此值显示在此节点正在运行的线程通过多页分配器分配的内存。此内存来自外部的缓冲池。
  • SinglePage 分配器︰ 此值显示在此节点正在运行的线程通过单页面分配器分配的内存。此内存是从缓冲池被盗。
注意:虚拟机保留值和内存中的所有节点上的VM 提交值的总和会略小于内存管理器部分中报告的相应值。

聚合的内存

下一节包含每个职员类型和每个 NUMA 节点聚合内存信息。对于 NUMA 启用系统,可能会看到类似于下面的输出。



注意:下表包含仅输出的一部分。

   MEMORYCLERK_SQLGENERAL (node 0)                                  KB    ---------------------------------------------------------------- --------------------


VM Reserved 0

VM Committed 0

AWE Allocated 0

SM Reserved 0

SM Commited 0

SinglePage Allocator 592

MultiPage Allocator 2160



(7 row(s) affected)



MEMORYCLERK_SQLGENERAL (node 1) KB

---------------------------------------------------------------- --------------------

VM Reserved 0

VM Committed 0

AWE Allocated 0

SM Reserved 0

SM Commited 0

SinglePage Allocator 136

MultiPage Allocator 0



(7 row(s) affected)



MEMORYCLERK_SQLGENERAL (Total) KB

---------------------------------------------------------------- --------------------

VM Reserved 0

VM Committed 0

AWE Allocated 0

SM Reserved 0

SM Commited 0

SinglePage Allocator 728

MultiPage Allocator 2160



(7 row(s) affected)
注意:这些节点 Id 对应于正在运行 SQL Server 的计算机的 NUMA 节点配置。该节点 Id 包括在硬件 NUMA 节点或 SMP 系统上定义的可能的软件 NUMA 节点。若要查找每个节点的节点 Id 与 Cpu 之间的映射,查看事件 ID 号为 17152 的信息。当您启动 SQL Server 时,将在事件查看器应用程序日志中记录此事件。



对于 SMP 系统中,您将看到每个职员类型只有一个部分。本部分将类似于以下。
   MEMORYCLERK_SQLGENERAL (Total)                                   KB    ---------------------------------------------------------------- --------------------


VM Reserved 0

VM Committed 0

AWE Allocated 0

SM Reserved 0

SM Commited 0

SinglePage Allocator 768

MultiPage Allocator 2160



(7 row(s) affected)
以下各节中的其他信息是关于共享内存︰

  • SM 保留︰ 此值显示保留这种使用内存映射文件 API 的所有职员的 VAS。此 API 被也称为共享的内存。

  • SM 承诺︰ 此值显示 VAS 提交的这种使用内存映射文件 API 的所有职员。




可以通过使用sys.dm_os_memory_clerks动态管理视图 (DMV) 获取内存中的所有节点的每个职员类型的摘要信息。若要执行此操作,请运行下面的查询︰



select type,


sum(virtual_memory_reserved_kb) as [VM Reserved],

sum(virtual_memory_committed_kb) as [VM Committed],

sum(awe_allocated_kb) as [AWE Allocated],

sum(shared_memory_reserved_kb) as [SM Reserved],

sum(shared_memory_committed_kb) as [SM Committed],

sum(multi_pages_kb) as [MultiPage Allocator],

sum(single_pages_kb) as [SinlgePage Allocator]

from

sys.dm_os_memory_clerks

group by type



缓冲区的分布

下一节显示在缓冲池中的 8 千字节 (KB) 缓冲区的分布。
   Buffer Distribution            Buffers   ------------------------------ -----------


Stolen 553

Free 103

Cached 161

Database (clean) 1353

Database (dirty) 38

I/O 0

Latched 0



(7 row(s) affected)
这一节中的元素如下所示︰
  • Stolen: Stolen 内存描述服务器用于其他目的的 8 KB 缓冲区。这些缓冲区可作为通用的内存存储分配。服务器的不同组件使用这些缓冲区来存储在内部数据结构。惰性写入器进程不允许刷新 Stolen 缓冲区超出缓冲区池。
  • 自由︰ 此值显示提交当前未使用的缓冲区。这些缓冲区可以保存数据。或者,其他组件可能会请求这些缓冲区,然后将这些缓冲区标记为Stolen。
  • 高速缓存︰ 此值显示为各种高速缓存使用的缓冲区。
  • 数据库 (干净)︰ 此值显示数据库内容并且尚未修改的缓冲区。
  • 数据库 (脏)︰ 此值显示具有数据库的内容和已修改的缓冲区。这些缓冲区包含更改,必须刷新到磁盘。


  • I/O︰ 此值显示等待挂起的 I/O 操作的缓冲区。

  • Latched︰ 此值显示锁定缓冲区。线程将读取或修改网页的内容时,已被锁定缓冲区。从磁盘读取页时,也已锁定缓冲区或向磁盘写入。 锁闩用于维护物理页中的数据一致性,同时正对其进行读取或修改。锁用于维护逻辑和事务处理的一致性。

缓冲区池详细信息

可以通过使用sys.dm_os_buffer_descriptors DMV 获取缓冲区池缓冲区的数据库页的详细的信息。然后,您可以获取有关所使用的其他服务器用途使用sys.dm_os_memory_clerks DMV 的缓冲池页的详细的信息。



下一节列出关于缓冲区池以及其他信息的详细信息。
   Buffer Counts                  Buffers   ------------------------------ --------------------


Committed 1064

Target 17551

Hashed 345

Stolen Potential 121857

External Reservation 645

Min Free 64

Visible 17551

Available Paging File 451997



(8 row(s) affected)
这一节中的元素如下所示︰
  • 已提交︰ 此值显示提交的总缓冲区。提交的缓冲区具有与其关联的物理内存。已提交值是缓冲池中的当前大小。此值包括如果启用 AWE 支持分配的物理内存。
  • 目标︰ 此值显示目标大小的缓冲池。如果目标值大于已提交值,缓冲池在不断增加。如果目标值是小于已提交的值,收缩的缓冲池。
  • Hashed︰ 此值显示数据页和索引页存储在缓冲池中。
  • 被盗可能︰ 此值显示了可以从缓冲池被盗最多页数。
  • ExternalReservation︰ 此值显示已预留的查询将会执行排序操作或哈希操作的页面。这些页未失窃。
  • 最小可用︰ 此值显示的页面的缓冲池试图对可用的列表。
  • 可见性︰ 此值显示同时可见的缓冲区。这些缓冲区可以直接访问一次。此值是通常等于总缓冲区。但是,当启用 AWE 支持时,此值可能小于总缓冲区。
  • 可用的分页文件︰ 此值显示了可用于提交的内存。此值表示为 8 KB 缓冲区的数目。有关详细信息,请参阅 Windows API 文档中的""GlobalMemoryStatusEx 函数主题。

过程高速缓存

下一节介绍的过程高速缓存的构成。
   Procedure Cache                Value   ------------------------------ -----------


TotalProcs 4

TotalPages 25

InUsePages 0



(3 row(s) affected)
这一节中的元素如下所示︰
  • TotalProcs︰ 此值显示目前在过程高速缓存中的缓存的对象总数。此值将与sys.dm_exec_cached_plans DMV 中的条目匹配。



    注意:由于此类信息的动态特性,匹配项可能不准确。您可以使用性能监视器来监视SQL Server︰ 计划高速缓存对象和sys.dm_exec_cached_plans DMV 的缓存对象,例如触发器、 过程和特殊对象的类型的详细信息。
  • TotalPages︰ 此值显示的累积页面,您必须将所有已缓存的对象存储在过程高速缓存。
  • InUsePages︰ 此值显示属于当前正在运行的过程的过程缓存中的页面。这些页不能放弃。

全局内存对象

下一节包含有关各种全局内存对象的信息。本节还包含多少内存的全局内存对象,请使用有关信息。
   Global Memory Objects          Buffers   ------------------------------ --------------------


Resource 126

Locks 85

XDES 10

SETLS 2

SE Dataset Allocators 4

SubpDesc Allocators 2

SE SchemaManager 44

SQLCache 41

Replication 2

ServerGlobal 25

XP Global 2

SortTables 2



(12 row(s) affected)
这一节中的元素如下所示︰
  • 资源︰ 此值显示资源对象使用的内存。资源对象用于存储引擎和服务器范围内的各种结构。
  • 锁定︰ 此值显示的内存,则锁管理器使用。
  • XDES︰ 此值显示的内存,则事务管理器使用。
  • SETLS︰ 此值显示用于分配使用线程本地存储区的特定于存储引擎的每个线程结构的内存。
  • SE 数据集分配器︰ 此值显示了用于通过访问方法设置访问表的分配结构的内存。
  • SubpDesc 分配器︰ 此值显示了用于管理子过程并行查询、 备份操作,还原操作、 数据库操作、 文件操作、 镜像和异步游标的内存。这些子过程也称为是并行的进程。
  • SE SchemaManager︰ 此值显示架构管理器用于存储特定于存储引擎的元数据的内存。
  • SQLCache︰ 此值显示用来存储文本和特殊语句的预准备语句的内存。

  • 复制︰ 此值显示服务器使用内部复制子系统的内存。
  • ServerGlobal︰ 此值显示全局服务器内存对象,通常由多个子系统。
  • XP 全局︰ 此值显示扩展存储的过程使用的内存。
  • 排序表︰ 此值显示的内存中排序表使用。

查询内存对象

下一节描述查询内存授权信息。此部分包含的查询内存使用情况的快照。查询内存也称为是工作区内存。
   Query Memory Objects           Value   ------------------------------ -----------


Grants 0

Waiting 0

Available (Buffers) 14820

Maximum (Buffers) 14820

Limit 10880

Next Request 0

Waiting For 0

Cost 0

Timeout 0

Wait Time 0

Last Target 11520



(11 row(s) affected)



Small Query Memory Objects Value

------------------------------ -----------

Grants 0

Waiting 0

Available (Buffers) 640

Maximum (Buffers) 640

Limit 640



(5 row(s) affected)
如果大小和成本的查询满足"小"的查询内存阈值,查询放在小查询队列。此行为可防止较小查询延迟背后大队列中已有的查询。



这一节中的元素如下所示︰
  • 授权︰ 此值显示了内存授予运行查询。

  • 等待︰ 此值显示正在等待获取内存授予的查询。
  • 可︰ 此值显示,可供查询供使用作为哈希区和作为排序工作区缓冲区。定期更新的可用值。

  • 最大︰ 此值表示可用作工作区的所有查询给定的总缓冲区。
  • 限制︰ 此值显示大查询队列查询执行目标。此值与(缓冲区) 的最大值,因为在队列中的更改之前,还未更新(缓冲区) 的最大值。
  • 下一个请求︰ 此值显示请求的内存大小,缓冲区,为下一步等待的查询中。
  • 等待︰ 此值显示必须可用于运行的查询的下一个请求的值所引用的内存量。等待的值是预留空间系数相乘的下一个请求的值。此值有效地保证了下一步等待查询运行时,将导致了特定数量的内存可用。
  • 成本︰ 此值显示的下一个等待的查询的成本。
  • 超时︰ 此值显示超时时间,以秒为单位,为下一步等待查询。


  • 等待时间︰ 此值显示经过的时间,以毫秒为单位下, 一步等待查询被放入队列中。
  • 最后一个目标︰ 此值显示查询执行的总内存限制。此值是大的查询队列和小查询队列的组合的限制。

优化

下一节是试图在同一时间优化查询的用户的摘要。
   Optimization Queue             Value   ------------------------------ --------------------


Overall Memory 156672000

Last Notification 1

Timeout 6

Early Termination Factor 5



(4 row(s) affected)



Small Gateway Value

------------------------------ --------------------

Configured Units 8

Available Units 8

Acquires 0

Waiters 0

Threshold Factor 250000

Threshold 250000



(6 row(s) affected)



Medium Gateway Value

------------------------------ --------------------

Configured Units 2

Available Units 2

Acquires 0

Waiters 0

Threshold Factor 12



(5 row(s) affected)



Big Gateway Value

------------------------------ --------------------

Configured Units 1

Available Units 1

Acquires 0

Waiters 0

Threshold Factor 8



(5 row(s) affected)
查询提交给服务器进行编译。编译过程包括分析、 algebraization 和优化。查询分为基于每个查询将在编译过程中使用的内存量。



注意:此值不包括运行查询所需的内存。





查询启动时,有是没有限制的可编译查询数。内存占用增加并达到某个阈值,该查询必须通过网关版以继续。每个网关后逐渐衰减的同时已编译查询的限制。每个网关的大小取决于平台和负载。选择网关的大小可以实现可缩放性和吞吐量最大化。



如果查询不能通过一个网关,请查询将等待,直到有可用的内存。或者,查询将返回超时错误 (错误 8628)。此外,查询可能无法获得一个网关,如果用户取消了查询或检测到死锁。如果查询通过多个网关,查询编译过程完成之前不能释放较小的网关。





此行为可让只有几个内存密集型编译在同一时间发生。此外,这种行为最大化吞吐量较小的查询。

内存经纪人

接下来的三部分显示有关内存经纪人信息控件缓存内存、 被盗的内存和保留的内存。以下各节提供的信息仅用于内部诊断机制。因此,此信息不在此处详细说明。
   MEMORYBROKER_FOR_CACHE           Value   -------------------------------- --------------------


Allocations 1843

Rate 0

Target Allocations 1843

Future Allocations 0

Last Notification 1



(4 row(s) affected)



MEMORYBROKER_FOR_STEAL Value

-------------------------------- --------------------

Allocations 380

Rate 0

Target Allocations 1195

Future Allocations 0

Last Notification 1



(4 row(s) affected)



MEMORYBROKER_FOR_RESERVE Value

-------------------------------- --------------------

Allocations 0

Rate 0

Target Allocations 1195

Future Allocations 0

Last Notification 1



(4 row(s) affected)
属性

文章 ID:907877 - 上次审阅时间:2017年2月25日 - 修订版本: 1

这篇文章中的信息适用于:
Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems

转载于:https://www.cnblogs.com/zengkefu/p/6984416.html

更多相关:

  • 更多内容,欢迎关注微信公众号:全菜工程师小辉~前言在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理。这篇博客将针对第三个原因,进行更详细的讲解。首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space)...

  • 一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...

  • 我的爱机是一台ThinkPad T420,原装三星DDR 1333 4G内存一根,还剩一根内存位置,最近趁京东6.18促销,准备增加一根物理内存。为了确保兼容性,觉得仍然选购DDR 1333 4G内存,于是购买了金士顿这款,比如DDR3 1600的还贵。 这个安装过程完全参照该内存的网页提示进行 这里简单记录一下,以备...

  • 陪伴我多年的老本ThinkPad T420渐渐垂垂老矣, 我想更新一下可以更新的部分, 比如将2.5寸HDD更换为SSD, 将单条4G内存再增加一根, 凡此种种想法, 可能最后归结为如何获取该笔记本的硬件配置信息, 在windows下面使用鲁大师之类的检测软件, 也许很好搞定,但是在Ubuntu 14.04平台上如果办到呢? 很简单...

  • 一.内存错误出现的场景 这几天在重构ATS插件代码的过程中遇到了烦人的内存泄露问题, 周五周六连续两天通过走查代码的方法,未能看出明显的导致内存错误的代码, 同时也觉得C和C++混合编程得到一个动态库, 在一个.cpp主文件中,即用new又用malloc来动态分配内存, 可能会导致内存错误.后来网上调研和查资料发现, new和mal...

  • top –hv | -abcHimMsS –d delay –n iterations –p pid [, pid …] top程序提供运行系统的动态实时视图,它可以显示系统概要信息以及当前由Linux内核当前管理的任务列表。所示的系统概要信息的类型以及为任务显示的信息的类型、顺序和大小都是用户可配置的,并且可以在重新启动时使配置保持...

  • 加上下面两句即可实现root窗口的置顶显示,可以用于某些程序的消息提示,能够弹出到桌面显示 root = Tk() root.wm_attributes('-topmost',1) 转载于:https://www.cnblogs.com/shuchengxiang/p/6632140.html...

  • 转载文章,原文链接:Matlab中的静态文本框中显示多行内容 有时候,我们在GUI中利用静态文本框显示程序的结果,但是结果很长,一行未必可以显示的开,而静态文本框不像edit或listbox那样通过滚动条来显示多行内容,即便设置了max和min属性也是一样的。 于是,怎么在静态文本框中显示多行是很有意义的。 解决方法 利用函数text...

  • 使用方法3个简单步骤对于其他API调用,看到演示。 //显示一个信息没有标题 toastr.info('Are you the 6 fingered man?')其他选项/显示一个警...

  • GDB 调试 ------------------------------------------------------------------------------- gdb 帮助文档 help -- 查看 gdb 的命令种类 help -- 查看 CmdType 种类的 gdb 命令 apropos