INF: 使用 DBCC MEMORYSTATUS 监视 SQL Server 内存使用

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

本文内容

概要

DBCC MEMORYSTATUS 命令提供了 SQL Server 的当前内存状态的快照。此命令的输出是在相关的 SQL Server 内存消耗量或特定内存不足错误 (其中许多自动打印在错误日志中的此输出) 的问题进行故障排除非常有用。Microsoft 产品支持服务也可能会请求此命令运行在特定的支持事件过程中,如果您遇到一个错误,可能会与低内存条件相关联。

此命令的目的被为了是一个 Microsoft 产品支持服务的诊断工具。输出的格式和提供的详细信息的级别是服务包和产品版本之间的更改。DBCC MEMORYSTATUS 命令由提供该功能很可能将通过不同机制在将来产品版本和此命令不再起作用,可能会被替换。更改或删除此命令之前的状态将变为无其他警告。因此,依赖于其行为的应用程序可能会破坏不发出警告。

DBCC MEMORYSTATUS 的输出包含七个节。本文介绍的某些键可以从输出前四个部分中将收集的数据。其余章节涉及专有的实现详细信息,并且它们不将在本文中介绍。 Microsoft 产品支持服务不会回答所有问题,或提供含义超出了本文中提供了什么的特定计数器的其他信息。

更多信息

第一节

第一节描述在缓冲池中的 8 KB 缓冲区的通讯组。没有为每个潜在的 8 KB 页在缓冲池中缓冲区结构。这包括物理页面,如果地址窗口扩展 (AWE) 处于启用状态。此结构包含指示基础的页的状态的位数 (也就是是否已修改过该页被固定,是在 IO,和更多)。本节详细介绍了具有特定状态位的缓冲区的数目。
Buffer Distribution              Buffers     
------------------------------   ----------- 
Stolen                           241
Free                             95
Procedures                       89
Inram                            0
Dirty                            16
Kept                             0
I/O                              0
Latched                          18
Other                            880

(9 row(s) affected)
				
Stolen. Stolen 内存描述正在使用的排序或为哈希操作 (查询工作区内存) 或为那些正在使用作为分配的泛型内存存储来存储内部数据结构 (如锁、 事务上下文和连接信息的缓冲区的缓冲区。不允许刷新缓冲池超出 Stolen 缓冲区,惰性写入器进程。

可用 是指当前不在使用中的已提交的缓冲区。 这些是可用于保存数据,或他们可能请求的其他组件,并标记为 Stolen

过程过程 是指的保持缓存的存储的过程内存缓冲区。这些缓冲区包含已编译和可执行计划的过程和缓存的特别计划。

InramInram 指的是不能删除从内存 (通过使用 DBCC PINTABLE 命令或 sp_tableoption 存储过程固定) 的钉住表的页。

已更新。包含有不尚未被刷新的更改的数据页是指 Dirty 到磁盘。

保存Kept 指的是要被暂时驻留在内存中以防止它们被刷新的页。SQL Server 2000 中不使用此值。

I/O. I/O 是指一个挂起的 I/O 操作正在等待的缓冲区。SQL Server 2000 上,这包括映射或 $ 取消映射通过 AWE 缓冲区。

已锁定。锁定的缓冲区记录缓冲区位置连接读取或已修改页中的行的数。若要确保在页中数据的物理一致性,尽管它被读取或锁定用于确保逻辑和事务的一致性时修改使用闩锁。

其他。这些是不能满足任一条件前面提到的提交的页。通常,满足此条件的缓冲区的大多数是哈希的数据和索引页,高速缓存中。

第二个节

第二部分列出了一些反映总大小和缓冲池组成的总计。
Buffer Counts                  Buffers     
------------------------------ ----------- 
Committed                      1339
Target                         6318
Hashed                         914
InternalReservation            120
ExternalReservation            0
Min Free                       16

(6 row(s) affected)
				
提交正在提交在 Microsoft Windows NT 的缓冲区的总数。已提交 值是当前的缓冲池的"大小"。此值包含如果启用了 AWE,则分配的物理内存。

目标。目标提交计数,或如何大缓冲池是要进行。是否 已提交 值大于 目标 计数在不断增加缓冲池。如果 目标 计数小于 已提交 值,缓冲池收缩。惰性写入器进程使用此值来确定是否增长或收缩缓冲池。

哈希运算。存储在缓冲区池中的数据和索引页的数量。

InternalReservation。页面缓冲池保留为其自身的数目。InternalReservation 值是以满足用户的当前数量的简单数据要求所需的最小页数。

ExternalReservation。供的查询,可以将执行排序或哈希操作但的具有不尚未被窃的页数。这将用作于提示以在惰性写入器将有大量内存的一个即将到来的要求。

最小可用。页面缓冲池试图空闲列表上保留的数目。如果可用列表低于 最小可用 值,缓冲池会尝试填充可用列表中,通过放弃旧页,从数据高速缓存或从过程高速缓存的旧过程。

第三个部分

第三部分描述了过程高速缓存组成。
Procedure Cache                Value       
------------------------------ ----------- 
TotalProcs                     17
TotalPages                     89
InUsePages                     40

(3 row(s) affected)
				
TotalProcs。当前在过程高速缓存中的缓存对象的总数。此值将匹配 syscacheobjects 虚拟表中的条目数。您可以使用性能监视器来监视的高速缓存的对象--为示例、 触发器、 过程,和广告的特定类型的详细分解为 SQL Server:Cache 管理器对象。

TotalPages。页面存储所有缓存的对象所必需的累积数目。

InUsePages。在过程高速缓存中属于当前正在执行的过程的页面数。这些不能被放弃。

第四个部分

第四部分描述了相对分布情况的服务器中的主要组件组之间的被盗缓冲区。SQL Server 实现其自己内存经理的缓冲池页用于较小的分配和的回退到使用操作系统例程,仅为大于大约 8 KB 的分配。这些较大的分配是缓冲池之外,它们通常所说的分配从 MemToLeave 区域。此区域的大小可以通过使用来控制在 -g 命令行选项。

通常,从 MemToLeave 的内存分配的大多数是从正在运行的进程内 COM 对象、 扩展的存储的过程和链接的服务器的非 SQL_Server 内存使用者。 DBCC MEMORYSTATUS 中报告的与操作系统相关值只反映的由 SQL Server 直接 MemToLeave 分配。 在发生 MemToLeave 这些其他组件的任何其他分配不包括在内,因为 SQL Server 有不了解这些内存请求。
Dynamic Memory Manager         Buffers     
------------------------------ ----------- 
Stolen                         330
OS Reserved                    152
OS Committed                   138
OS In Use                      129
General                        322
QueryPlan                      87
Optimizer                      0
Utilities                      10
Connection                     40

(9 row(s) affected)
				
被盗。对从缓冲池由五个内存管理器 (常规,规划的查询优化器的实用程序连接) 被盗的缓冲区的总数量。这些页面用于服务小于 8 KB 的内存分配。

保留的操作系统。保留从操作系统可以处理大于大约 8 KB 的分配请求的页面数。

操作系统已提交。保留的区域中已提交的内存量。操作系统提交 的值应小于或等于 OS 保留 值因为缓冲区是第一次保留,然后提交。当不再使用时,一些内存可能 decommitted。

注意在 SQL Server 2000 (即固定 SQL Server 2000 Service Pack 3 中),从而导致该值不以准确维护一个 bug,并且因此可能会超出有效范围。

正在使用的操作系统操作系统已提交 的缓冲区的当前备份未完成的内存分配。

常规。在服务器 (包括分析或规范化、 锁定、 事务上下文描述内存中的元数据的表和索引,和其他人的内部数据结构中的常规内存使用者所使用的内存。此值为 8 KB 缓冲区总数。其中一些可能的缓冲区池中的被盗的缓冲区和其他人可能来自 MemToLeave

QueryPlan。用来存储查询计划 transiently 或高速缓存中的内存。此值为 8 KB 缓冲区总数。其中一些可能的缓冲区池中的被盗的缓冲区和其他人可能来自 MemToLeave

优化程序。正在查询优化器使用的内存。此值为 8 KB 缓冲区总数。其中一些可能的缓冲区池中的被盗的缓冲区和其他人可能来自 MemToLeave

实用程序。 由各种实用程序例程,如 BCP、 日志管理器、 并行的查询使用的内存 :: fn_trace_gettable,和其他人。此值为 8 KB 缓冲区总数。其中一些可能的缓冲区池中的被盗的缓冲区和其他人可能来自 MemToLeave

连接。 用于存储持有的每个用户连接连接上下文的数据结构的内存。这还包括网络发送的内存,并接收与连接相关联的缓冲区。 此值为 8 KB 缓冲区总数。其中一些可能缓冲池和其他被盗可能来自 MemToLeave 的缓冲区。

参考

联机 SQL Server 简介册
佳明,Kalen。内部 Microsoft SQL Server 2000,Microsoft Press,2000年。

属性

文章编号: 271624 - 最后修改: 2003年11月12日 - 修订: 4.3
这篇文章中的信息适用于:
  • Microsoft SQL Server 2000 标准版
  • Microsoft SQL Server 7.0 标准版
关键字:?
kbmt kbinfo KB271624 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 271624
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