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

本文介绍如何使用 DBCC MEMORYSTATUS 命令监视内存使用情况。

原始产品版本:SQL Server
原始 KB 编号: 907877

简介

命令DBCC MEMORYSTATUS提供当前内存状态 Microsoft SQL Server和 OS 的快照。 它提供SQL Server中内存分布和使用情况的最详细的输出之一。 可以使用输出来排查SQL Server中的内存消耗问题,或对特定的内存不足错误进行故障排除。 许多内存不足错误会在错误日志中自动生成此输出。 如果遇到与内存不足情况相关的错误,可以运行 DBCC MEMORYSTATUS 命令并在联系 Microsoft 支持部门 时提供输出。

命令的 DBCC MEMORYSTATUS 输出包括内存管理、内存使用情况、聚合内存信息、缓冲池信息和过程缓存信息部分。 它还描述了全局内存对象、查询内存对象、优化和内存代理的输出。

注意

如果启用了“在内存中锁定页面”选项,性能监视器 (PerfMon) 和任务管理器不会考虑内存使用率。 没有性能计数器显示地址窗口化扩展 (AWE) API 内存使用情况 。

重要

命令DBCC MEMORYSTATUS旨在用作Microsoft 支持部门的诊断工具。 服务包和产品版本之间可能会更改输出的格式和提供的详细信息级别。 在更高产品版本中, DBCC MEMORYSTATUS 命令提供的功能可能会替换为其他机制。 因此,在更高版本的产品中,此命令可能不再有效。 在更改或删除此命令之前,不会提供其他警告。 因此,使用此命令的应用程序可能会中断,而不会发出警告。

命令的DBCC MEMORYSTATUS输出已从早期版本的 SQL Server 更改。 目前,它包含多个在早期产品版本中不可用的表。

如何使用 DBCC MEMORYSTATUS

DBCC MEMORYSTATUS通常用于调查SQL Server报告的内存不足问题。 如果SQL Server进程外部存在外部内存压力,或者进程内部产生内部压力,则可能会出现内存不足的情况。 内部压力可能是由SQL Server数据库引擎或进程 (中运行的其他组件(例如链接服务器、XP、SQLCLR、入侵防护或防病毒软件) )引起的。 有关如何排查内存压力问题的详细信息,请参阅排查SQL Server中的内存不足或内存不足问题

下面是使用 命令和解释其结果的一般步骤。 特定方案可能需要以略微不同的方式处理输出,但此处概述了整体方法。

  1. 运行 DBCC MEMORYSTATUS 命令。
  2. 使用“进程/系统计数”和“内存管理器”部分确定外部内存压力 (,例如,计算机的物理内存或虚拟内存不足,或者SQL Server工作集) 分页。 此外,使用这些部分来确定与系统上的总体内存相比,SQL Server数据库引擎分配了多少内存。
  3. 如果确定存在外部内存压力,请尝试减少其他应用程序和 OS 的内存使用量,或添加更多 RAM。
  4. 如果确定SQL Server引擎使用大部分内存 (内部内存压力) ,则可以使用 的其余部分DBCC MEMORYSTATUS来确定哪些组件 (内存管理器、缓存存储、UserStore 或对象存储) 是此内存使用量的最大参与者。
  5. 检查每个组件: MEMORYCLEARKCACHESTOREUSERSTOREOBJECTSTORE。 检查其 Pages 分配值,以确定组件在SQL Server内消耗的内存量。 有关大多数数据库引擎内存组件的简要说明,请参阅 Memory Clerk types 表。
    1. 在极少数情况下,分配是直接虚拟分配,而不是通过内存管理器SQL Server。 在这些情况下,检查特定组件下的 VM Committed 值,而不是“分配的页”。
    2. 如果计算机使用 NUMA,则会按节点划分一些内存组件。 例如,可以观察 OBJECTSTORE_LOCK_MANAGER (node 0)OBJECTSTORE_LOCK_MANAGER (node 1)OBJECTSTORE_LOCK_MANAGER (node 2)等,最后观察 中 OBJECTSTORE_LOCK_MANAGER (Total)每个节点的求和值。 最好从报告总值的部分开始,然后根据需要检查明细。 有关详细信息,请参阅 NUMA 节点的内存使用情况
  6. 的一 DBCC MEMORYSTATUS 些部分提供有关特定内存分配器的详细和专用信息。 可以使用这些部分来了解其他详细信息,并进一步查看内存文员中分配的明细。 此类部分的示例包括缓冲池 (数据和索引缓存) 、过程缓存/计划缓存、查询内存对象 (内存授予) 、优化队列以及小型和中型网关 (优化器内存) 。 如果已知道SQL Server中内存的特定组件是内存压力的来源,则建议直接转到该特定部分。 例如,如果已以其他某种方式确定内存授予使用率过高导致内存错误,则可以查看 查询内存对象 部分。

本文的其余部分介绍了输出中的 DBCC MEMORYSTATUS 一些有用的计数器,这些计数器使你能够更有效地诊断内存问题。

进程/系统计数

本部分提供表格格式的示例输出,并介绍其值。

Process/System Counts                Value
------------------------------------ ------------
Available Physical Memory            5060247552
Available Virtual Memory             140710048014336
Available Paging File                7066804224
Working Set                          430026752
Percent of Committed Memory in WS    100
Page Faults                          151138
System physical memory high          1
System physical memory low           0
Process physical memory low          0
Process virtual memory low           0

以下列表讨论值及其说明:

  • 可用物理内存:此值显示计算机上的可用内存总量。 在此示例中,可用内存为 5,060,247,552 字节。
  • 可用虚拟内存:此值显示SQL Server进程的可用虚拟内存总量为 140,710,048,014,336 字节 (128 TB) 。 有关详细信息,请参阅 内存和地址空间限制
  • 可用分页文件:此值显示可用的分页文件空间。 在此示例中,值为 7,066,804,224 字节。
  • 工作集:此值显示) 为 430,026,752 字节,SQL SERVER进程在 RAM (中的虚拟内存总量未分页。
  • WS 中提交内存的百分比:此值显示SQL SERVER分配的虚拟内存的百分比驻留在 RAM (或工作集) 。 值 100% 表示所有提交的内存都存储在 RAM 中,其中 0% 已分页。
  • 页面错误:此值显示SQL Server的硬页和软页错误总数。 在此示例中,值为 151,138。

其余四个值是二进制值或布尔值。

  • 系统物理内存高值为 1 表示SQL Server认为计算机上的可用物理内存较高。 这就是为什么 “系统物理内存不足 ”的值为 0,这意味着没有内存不足。 类似的逻辑应用于 处理物理内存不足处理虚拟内存不足,其中 0 表示它为 false,1 表示为 true。 在此示例中,这两个值为 0,这意味着SQL Server进程有足够的物理和虚拟内存。

内存管理器

本部分提供内存管理器的示例输出,其中按SQL Server显示总体内存消耗情况。

Memory Manager             KB
-------------------------- --------------------
VM Reserved                36228032
VM Committed               326188
Locked Pages Allocated     0
Large Pages Allocated      0
Emergency Memory           1024
Emergency Memory In Use    16
Target Committed           14210416
Current Committed          326192
Pages Allocated            161904
Pages Reserved             0
Pages Free                 5056
Pages In Use               286928
Page Alloc Potential       15650992
NUMA Growth Phase          0
Last OOM Factor            0
Last OS Error              0

以下列表讨论输出中的值及其说明:

  • VM 保留:此值显示 (VAS) 或虚拟内存 (VM) SQL Server保留的虚拟地址空间总量。 虚拟内存预留实际上不使用物理内存;它只是意味着虚拟地址在大型 VAS 中保留。 有关详细信息,请参阅 VirtualAlloc () 、MEM_RESERVE

  • VM 已提交:此值显示SQL Server在 KB) 中提交 (的虚拟内存 (VM) 的总量。 这意味着进程使用的内存由物理内存提供支持,或者页面文件支持较少。 以前保留的内存地址现在由物理存储提供支持;即分配的 。 如果启用了“内存中锁定页”,SQL Server使用替代方法来分配内存、AWE API,并且大多数内存不会反映在此计数器中。 有关这些分配,请参阅 [已锁定页分配] (#Locked 分配) 页。 有关详细信息,请参阅 VirtualAlloc () 、MEM_COMMIT

  • 分配的页数:此值显示SQL Server数据库引擎分配的内存页总数。

  • 已分配的锁定页数:此值表示SQL Server使用 AWE API 在物理 RAM 中分配和锁定的内存量(以 KB (KB) 为单位)。 它指示SQL Server正在使用的内存量,并请求保留在内存中以优化性能。 通过锁定内存中的页,SQL Server可确保关键数据库页随时可用,并且不会交换到磁盘。 有关详细信息,请参阅 将 Windows 扩展 (AWE) 内存。 值为零表示当前禁用“内存中锁定页”功能,SQL Server改用虚拟内存。 在这种情况下,VM Committed 值表示分配给SQL Server的内存。

  • 已分配的大页数:此值表示SQL Server使用大型页分配的内存量。 大型页面是操作系统提供的内存管理功能。 此功能使用更大的页面大小(例如 2 MB 或 4 MB),而不是使用标准页面大小 (通常为 4 KB) 。 值为零表示未启用该功能。 有关详细信息,请参阅 Virtual Alloc () ,MEM_LARGE_PAGES

  • 目标已提交:此值指示SQL Server目标已提交的内存量,根据最近的工作负荷,SQL Server可能消耗的理想内存量。

  • 当前已提交:此值指示操作系统的内存 (量(以 KB 为单位),) SQL Server内存管理器当前已提交 (在物理存储) 中分配。 此值包括“内存中锁定页” (AWE API) 或虚拟内存。 因此,此值与 VM 已提交或已分配的锁定页接近或相同。 请注意,当SQL Server使用 AWE API 时,某些内存仍由 OS 虚拟内存管理器分配,并将反映为 VM 已提交。

  • NUMA 增长阶段:此值指示SQL Server当前是否处于 NUMA 增长阶段。 有关计算机上存在 NUMA 节点时内存初始增加的详细信息,请参阅工作原理:SQL Server (NUMA 本地、外部和离开内存块)

  • 上一个 OS 错误:此值显示系统内存压力时发生的上一个 OS 错误。 SQL Server记录 OS 错误并将其显示在输出中。 有关 OS 错误的完整列表,请参阅 系统错误代码

NUMA 节点的内存使用情况

内存管理器部分后跟每个内存节点的内存使用情况摘要。 在启用了 NUMA) 的非统一内存访问 (系统中,每个硬件 NUMA 节点都有相应的内存节点条目。 在 SMP 系统中,有一个内存节点条目。 相同的模式将应用于其他内存部分。

Memory node Id = 0      KB
----------------------- -----------
VM Reserved             21289792
VM Committed            272808
Locked Pages Allocated  0
Pages Allocated         168904
Pages Free              3040
Target Committed        6664712
Current Committed       272808
Foreign Committed       0
Away Committed          0
Taken Away Committed    0

注意

  • 该值 Memory node Id 可能不对应于硬件节点 ID。
  • 这些值显示在此 NUMA 节点上运行的线程分配的内存。 这些值不是 NUMA 节点本地的内存。
  • 所有内存节点上的 VM 保留值和 VM 提交值的总和将略小于内存管理器表中报告的相应值。
  • NUMA 节点 64 (节点 64) 为 DAC 保留,很少对内存调查感兴趣,因为此连接使用的内存资源有限。 有关专用管理员连接 (DAC) 的详细信息,请参阅 数据库管理员的诊断连接

以下列表讨论了输出表中的值及其说明:

  • VM 保留:显示此节点上运行的线程保留的虚拟地址空间 (VAS) 。
  • VM 已提交:显示在此节点上运行的线程提交的 VAS。

聚合内存

下表包含每个 clerk 类型和 NUMA 节点的聚合内存信息。 对于已启用 NUMA 的系统,可能会看到如下所示的输出:

MEMORYCLERK_SQLGENERAL (node 0) KB
------------------------------  --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5416

MEMORYCLERK_SQLGENERAL (node 1) KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 136

MEMORYCLERK_SQLGENERAL (Total)  KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5552

的值 Pages Allocated 显示特定组件分配给的内存页总数, (内存管理器、用户存储、对象存储或缓存存储) 。

注意

这些节点 ID 对应于运行 SQL Server 的计算机的 NUMA 节点配置。 节点 ID 包括可能在硬件 NUMA 节点或 SMP 系统之上定义的软件 NUMA 节点。 若要查找每个节点的节点 ID 和 CPU 之间的映射,请参阅信息事件 ID 17152。 启动SQL Server时,此事件记录在 事件查看器 的应用程序日志中。

对于 SMP 系统,每个职员类型只看到一个表,不计算 DAC 使用的节点数 = 64。 此表类似于以下示例。

MEMORYCLERK_SQLGENERAL (Total)     KB
--------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
Pages Allocated                    2928

这些表中的其他信息是有关共享内存的信息:

  • 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],          /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  -- SUM(single_pages_kb) AS [SinlgePage Allocator],        /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  SUM(pages_kb) AS [Page Allocated]                      /*Applies to: SQL Server 2012 (11.  x) and later.*/
FROM sys.dm_os_memory_clerks
GROUP BY TYPE

缓冲池详细信息

这是一个重要的部分,它提供缓冲池中不同状态数据和索引页的细分,也称为数据缓存。 以下输出表列出了有关缓冲池的详细信息和其他信息。

Buffer Pool                                       Pages
------------------------------------------------- ---------
Database                                          5404
Simulated                                         0
Target                                            16384000
Dirty                                             298
In IO                                             0
Latched                                           0
IO error                                          125
In Internal Pool                                  0
Page Life Expectancy                              3965

以下列表讨论输出中的值及其说明:

  • 数据库:显示具有数据库内容 (数据和索引页) ) (页的缓冲区数。
  • 目标:显示缓冲池的目标大小 (缓冲区计数) 。 请参阅本文前面部分中 的目标已提交 内存。
  • :显示包含数据库内容且已修改的页面。 这些缓冲区包含通常必须通过检查点进程刷新到磁盘的更改。
  • 在 IO 中:显示正在等待挂起的 I/O 操作的缓冲区。 这意味着这些页面的内容正在写入存储或从存储中读取。
  • 闩锁:显示已闩锁的缓冲区。 当线程读取或修改页面内容时,会锁定缓冲区。 从磁盘读取页或将页写入磁盘时,也会锁定缓冲区。 闩锁用于在读取或修改数据时保持页面上数据的物理一致性。 相反,锁用于维护逻辑和事务一致性。
  • IO 错误:显示可能遇到任何 I/O 相关 OS 错误的缓冲区计数, (这不一定指示) 出现问题。
  • 页生存期:此计数器测量最旧页在缓冲池中保留的时间(以秒为单位)。

可以使用 DMV 获取有关数据库页 sys.dm_os_buffer_descriptors 缓冲池的详细信息。 但是,请谨慎使用此 DMV,因为如果允许基于SQL Server的服务器拥有大量 RAM,它可能会运行很长时间并产生大量输出。

计划缓存

本部分讨论以前称为过程缓存的计划缓存。

Procedure Cache         Value
----------------------- -----------
TotalProcs              4
TotalPages              25
InUsePages              0

以下列表讨论输出中的值及其说明:

  • TotalProcs:此值显示过程缓存中当前缓存的对象总数。 此值与 DMV 中的 sys.dm_exec_cached_plans 条目数匹配。

    注意

    由于此信息的动态性质,匹配可能不精确。 可以使用 PerfMon 监视SQL Server:计划缓存对象和 sys.dm_exec_cached_plans DMV,了解有关缓存对象类型的详细信息,例如触发器、过程和即席对象。

  • TotalPages:显示用于在计划或过程缓存中存储所有缓存对象的累积页。 可以将此数字乘以 8 KB,以获取以 KB 表示的值。

  • InUsePages:显示过程缓存中属于当前处于活动状态的过程的页面。 不能丢弃这些页面。

全局内存对象

本部分包含有关各种全局内存对象及其使用的内存量的信息。

Global Memory Objects               Buffers
----------------------------------  ----------------
Resource                            576
Locks                               96
XDES                                61
DirtyPageTracking                   52
SETLS                               8
SubpDesc Allocators                 8
SE SchemaManager                    139
SE Column Metadata Cache            159
SE Column Metadata Cache Store      2
SE Column Store Metadata Cache      8
SQLCache                            224
Replication                         2
ServerGlobal                        1509
XP Global                           2
SortTables                          3

以下列表讨论输出中的值及其说明:

  • 资源:显示 Resource 对象使用的内存。 它由存储引擎用于各种服务器范围的结构。
  • :显示锁管理器使用的内存。
  • XDES:显示事务管理器使用的内存。
  • SETLS:显示用于分配特定于存储引擎的每个线程结构的内存,该结构使用线程本地存储 (TLS) 。 有关详细信息,请参阅 线程本地存储
  • SubpDesc 分配器:显示用于管理并行查询、备份操作、还原操作、数据库操作、文件操作、镜像和异步游标的子流程的内存。 这些子进程也称为“并行进程”。
  • SE SchemaManager:显示架构管理器用于存储特定于存储引擎的元数据的内存。
  • SQLCache:显示用于保存临时语句和已准备语句文本的内存。
  • 复制:显示服务器用于内部复制子系统的内存。
  • ServerGlobal:显示一般由多个子系统使用的全局服务器内存对象。
  • XP 全局:显示扩展存储过程使用的内存。
  • SortTables:显示排序表使用的内存。

查询内存对象

本部分介绍查询内存授予信息。 它还包括查询内存使用情况的快照。 查询内存也称为“工作区内存”。

Query Memory Objects (default)           Value
---------------------------------------- -------
Grants                                    0
Waiting                                   0
Available                                 436307
Current Max                               436307
Future Max                                436307
Physical Max                              436307
Next Request                              0
Waiting For                               0
Cost                                      0
Timeout                                   0
Wait Time                                 0

如果查询的大小和成本满足“小型”查询内存阈值,则查询将放入小型查询队列中。 此行为可防止在队列中已有的大型查询后面延迟较小的查询。

以下列表讨论输出中的值及其说明:

  • 授权:显示具有内存授予的正在运行的查询数。
  • 正在等待:显示等待获取内存授予的查询数。
  • 可用:显示可供查询用作哈希工作区和排序工作区的缓冲区。 该值 Available 定期更新。
  • 下一个请求:显示下一个等待查询的内存请求大小(以缓冲区为单位)。
  • 正在等待:显示必须可用于运行“下一个请求”值所引用的查询的内存量。 “等待”值是 Next Request 乘以余量因子的值。 此值有效地保证运行下一个等待查询时,特定内存量可用。
  • 成本:显示下一个等待查询的成本。
  • 超时:显示下一个等待查询的超时(以秒为单位)。
  • 等待时间:显示自下一个等待查询放入队列以来的运行时间(以毫秒为单位)。
  • 当前最大值:显示查询执行的总体内存限制。 此值是大型查询队列和小型查询队列的组合限制。

有关什么是内存授予、这些值的含义以及如何排查内存授予问题的详细信息,请参阅排查SQL Server中内存授予导致的性能缓慢或内存不足问题

优化内存

将查询提交到服务器进行编译。 编译过程包括分析、代数化和优化。 根据每个查询在编译过程中使用的内存对查询进行分类。

注意

此量不包括运行查询所需的内存。

查询启动时,可以编译的查询数没有限制。 随着内存消耗的增加并达到阈值,查询必须通过网关才能继续。 每个网关后同时编译的查询的限制会逐渐减少。 每个网关的大小取决于平台和负载。 选择网关大小以最大程度地提高可伸缩性和吞吐量。

如果查询无法传递网关,它将等待内存可用或返回超时错误 (错误 8628) 。 此外,如果取消查询或检测到死锁,查询可能不会获取网关。 如果查询传递多个网关,则在编译过程完成之前,它不会释放较小的网关。

此行为只允许同时进行少量内存密集型编译。 此外,此行为可最大程度地提高较小查询的吞吐量。

下表提供了由于查询优化内存不足而发生的内存等待的详细信息。 内部内存用于系统查询使用的优化器内存,而默认内存用于报告用户或应用程序查询的优化内存。

Optimization Queue (internal)      Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3673882624
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (internal)           Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (internal)          Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            0
Threshold Factor                   12
Threshold                          -1

Big Gateway (internal)             Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Optimization Queue (default)       Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3542319104
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (default)            Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (default)           Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            2
Threshold Factor                   12
Threshold                          -1

Big Gateway (default)              Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

下面是其中一些值的说明:

  • 配置的单位 - 指示可从网关使用编译内存的并发查询数。 在此示例中,32 个并发查询可以使用小型网关的内存 (默认) 、来自中型网关的 8 个并发查询以及来自 Big 网关的一个查询。 如前文所述,如果查询需要的内存比小型网关可以分配的内存多,它将转到“中等网关”,并且该查询被计为在两个网关中占用了一个单位。 查询所需的编译内存量越大,网关中配置的单元就越少。
  • 可用单位 - 指示从已配置单元列表中编译的可用于并发查询的槽数或单位数。 例如,如果有 32 个单位可用,但当前有三个查询使用编译内存,则 Available Units 为 32 减 3 或 29 个单位。
  • 获取 - 指示查询获取的要编译的单位数或槽数。 如果当前有三个查询使用网关中的内存,则 Acquires = 3。
  • Waiters - 指示网关中等待编译内存的查询数。 如果网关中的所有单元都用完,则 Waiters 值为非零,显示等待查询的计数。
  • 阈值 - 指示网关内存限制,该限制确定查询从何处获取其内存,或者它位于哪个网关。 如果查询需要的阈值不超过阈值,它将保留在小型网关中, (查询始终以小型网关) 开头。 如果它需要更多的内存进行编译,它将转到中等内存,如果该阈值仍然不足,则它会转到大网关。 对于小型网关,阈值因子为 380,000 字节, (可能会因 x64 平台的未来版本) 而更改。
  • 阈值因素:确定每个网关的阈值。 对于小型网关,由于阈值是预定义的,因此因子也设置为相同的值。 中型网关和大网关的阈值因素是优化队列) 中总优化器内存 (总内存的分数,分别设置为 12 和 8。 因此,如果由于其他SQL Server内存使用者需要内存而调整总体内存,则阈值因素也会导致动态调整阈值。
  • 超时:指示以分钟为单位的值,该值定义查询等待优化器内存的时间。 如果达到此超时值,会话将停止等待并引发错误 8628 - A time out occurred while waiting to optimize the query. Rerun the query.

内存中转站

本部分提供有关控制缓存内存、被盗内存和保留内存的内存中转站的信息。 只能将这些表中的信息用于内部诊断。 因此,此信息不详。

MEMORYBROKER_FOR_CACHE (internal)       Value
--------------------------------------- -------------
Allocations                             20040
Rate                                    0
Target Allocations                      3477904
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (internal)       Value
--------------------------------------- -------------
Allocations                             129872
Rate                                    40
Target Allocations                      3587776
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (internal)     Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3457864
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_CACHE (default)        Value
--------------------------------------- -------------
Allocations                             44592
Rate                                    8552
Target Allocations                      3511008
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (default)        Value
--------------------------------------- -------------
Allocations                             1432
Rate                                    -520
Target Allocations                      3459296
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (default)      Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3919104
Future Allocations                      872608
Overall                                 3919104
Last Notification                       1