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

文章翻译 文章翻译
文章编号: 907877 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文讨论了 DBCC MEMORYSTATUS 命令的输出。 此命令经常用于对 Microsoft SQL Server 内存消耗问题进行故障排除。

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

简介

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

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

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

更多信息

重要DBCC MEMORYSTATUS 命令的目的被为了是一个 Microsoft 客户支持服务的诊断工具。输出的格式和提供的详细信息的级别是服务包和产品版本之间的更改。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)
本节中的元素如下所示:
  • VM 保留: 此值显示了整个 SQL Server 而已保留的虚拟地址空间 (VAS) 量。
  • VM 保证: 此值显示了整个 VAS SQL Server 已提交的量。已提交的 VAS 已经与物理内存相关联。
  • AWE 分配: 此值显示了整个通过 AWE 机制 SQL Server 的 32 位版本上分配的内存量。或者,此值的显示在产品的 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 节点的本地内存。

本节中的元素如下所示:
  • VM 保留: 此值显示在此节点上运行的线程被保留在 VAS。
  • VM 保证: 此值显示在此节点上运行的线程提交的 VAS。
  • AWE 分配: 此值显示了通过 AWE 机制在产品的 32 位版本上分配的内存。或者该值显示了整个只有被锁定的页的该产品在 64 位版本上所使用的内存量。

    在一个 NUMA 启用系统中此值可以是不正确或负数。但是,在内存管理器部分中总体 AWE 分配 值是正确的值。 若要跟踪由单个 NUMA 节点分配的内存,使用 SQL Server: 缓冲区节点 性能对象。(有关详细的信息请参阅 SQL Server 联机丛书
  • multiPage 分配器: 此值显示在此节点上运行的线程通过 multipage 分配器分配的内存。此内存来自外部缓冲池。
  • 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 保证: 此值显示了这种使用内存映射文件 API 的所有职员都提交的 VAS。
您可以通过使用 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)
本节中的元素如下所示:
  • StolenStolen 内存 描述服务器用于其他目的的 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 中的条目相匹配。

    注意由于此信息的动态性的匹配项可能不是精确。您可以使用 PerfMon 来监视该 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 数据集 Allocators: 此值显示为通过 访问方法 设置的表格访问权限分配结构使用的内存。
  • SubpDesc Allocators: 此值显示了用于管理用于并行查询、 备份操作,还原操作、 数据库操作、 文件操作、 镜像,和异步游标的子进程的内存。 这些子进程也称为是 并行的进程
  • SE SchemaManager: 此值显示架构管理器用来存储特定于存储引擎的元数据的内存。
  • SQLCache: 此值显示用来存储文本的特殊的语句和准备语句的内存。
  • 复制: 此值显示了对内部复制子系统的服务器使用的内存。
  • ServerGlobal: 此值显示了由几个子系统通常使用的全局服务器内存对象。
  • XP 全局: 此值显示在扩展存储的过程使用的内存。
  • 排序表: 此值显示内存的排序表使用。

查询内存对象

下一节介绍了查询内存授权信息。本部分包括查询内存使用情况的快照。 Query memory is also known as workspace memory.
   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)
If the size and the cost of a query satisfy “small” query memory thresholds, the query is put in a small query queue. 此行为可防止多个较小的查询,后面更大的查询已在队列中的延迟。

本节中的元素如下所示:
  • 授予: 此值显示了具有内存授予的查询运行。
  • 等待: 此值显示在等待获取内存授予的查询。
  • 可用: 此值显示可供使用,如哈希工作区的查询,并为排序工作区缓冲区。可用 值定期更新。
  • 最大: 此值显示了可以指定要用作工作区的所有查询的总缓冲区。
  • 限制: 此值显示为大查询队列在查询执行目标。此值与 最大 (缓冲区) 值,因为直到没有队列中的更改不会更新 最大 (缓冲区) 值。
  • 下一个请求: 此值显示中的下一个等待查询的缓冲区的内存的请求大小。
  • 正在等待的: 此值显示了必须以运行 下一个请求 值是指的查询可用的内存量。等待的 值是 下一个请求 值预留空间系数相乘。此值有效地保证了特定数量的内存将提供下一个等待查询运行时。
  • 成本: 此值显示所需的下一个等待查询成本。
  • 超时: 此值显示在超时时间,以秒为单位的下一个等待查询。
  • 等待的时间: 此值显示经过的时间 (毫秒),因为下一个等待查询被放置在队列中。
  • 最后一次目标: 此值显示为查询执行了总体内存限制。此值是用于在大查询队列和小的查询队列组合的限制。

优化

The next section is a summary of the users who are trying to optimize queries at the same time.
   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)
Queries are submitted to the server for compilation. 在编译过程包括分析、 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)

属性

文章编号: 907877 - 最后修改: 2007年11月20日 - 修订: 1.3
这篇文章中的信息适用于:
  • 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
关键字:?
kbmt kbsql2005engine kbtshoot kbinfo KB907877 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 907877
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com