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

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

DBCC MEMORYSTATUS 的输出包含七个节。 本文介绍了一些可以被 gleaned 从前四个节中输出该密钥数据。 其余章节涉及专有的实现详细信息,并且它们不在本文中所述。 Microsoft 产品支持服务不会回答任何问题或提供有关含义超出了本文中提供的内容的特定计数器的附加信息。
回到顶端
更多信息
第一节第一节描述在缓冲池中的 8 KB 缓冲区的通讯组。 没有为每个潜在的 8 KB 页在缓冲池中缓冲区结构。 这包括物理页面,如果地址窗口扩展 (AWE) ...
第一节
第一节描述在缓冲池中的 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

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

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

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

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


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

latched latched 的缓冲区记录的缓冲区,其中一个连接是读取或正在修改从页行数。 闩锁用于确保在页中数据的物理一致性,虽然它是读取或修改时一个锁用于确保逻辑和事务的一致性。

其他 这些是不能满足任一条件前面提到的提交的页。 通常,满足此条件的缓冲区的大多数是哈希的数据和索引页高速缓存中。
回到顶端
第二个节
第二部分列出了反映总体大小和化妆缓冲区池的某些总计。
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 的内存分配的大多数是从非 SQL_Server 内存的使用者进行了正在运行的进程内 COM 对象、 扩展存储的过程以及链接的服务器。 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 提交 保留的区域中已提交的内存量。 因为缓冲区是先保留,然后提交,OS 提交 的值
应为小于或等于 OS 保留 的值。 当不再使用时,该内存的一些可能 decommitted

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

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

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

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

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

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

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