共用方式為


使用 DBCC MEMORYSTATUS 命令來監視 SQL Server 中的記憶體使用量

本文說明如何使用 DBCC MEMORYSTATUS 命令來監視記憶體使用量。

原始產品版本:SQL Server
原始 KB 編號: 907877

簡介

DBCC MEMORYSTATUS此命令會提供 SQL Server 和 OS Microsoft 目前記憶體狀態的快照集。 它提供 SQL Server 中記憶體散發和使用方式的最詳細輸出之一。 您可以使用輸出來針對 SQL Server 中的記憶體耗用量問題進行疑難解答,或針對特定記憶體不足錯誤進行疑難解答。 許多記憶體不足的錯誤會自動在錯誤記錄檔中產生此輸出。 如果您遇到與記憶體不足狀況相關的錯誤,您可以在連絡 Microsoft 支援服務 時執行 DBCC MEMORYSTATUS 命令並提供輸出。

命令的 DBCC MEMORYSTATUS 輸出包含記憶體管理、記憶體使用量、匯總記憶體資訊、緩衝池資訊和程式快取資訊的區段。 此命令也會描述全域記憶體物件的輸出、查詢記憶體物件、最佳化和記憶體代理程式。

注意

效能監視器 (PerfMon) 和任務管理員不會考慮完整記憶體使用量,如果已啟用 [記憶體中鎖定的頁面] 選項。 沒有效能計數器會顯示位址視窗延伸模組 (AWE) API 記憶體使用量 。

重要

此命令DBCC MEMORYSTATUS是 Microsoft 支援服務 的診斷工具。 輸出的格式和所提供的詳細數據層級可能會變更 Service Pack 與產品版本。 命令所提供的功能 DBCC MEMORYSTATUS 可能會由較新版本中的不同機制所取代。 因此,在較新的產品版本中,此命令可能無法再運作。 在變更或移除此命令之前,將不會提供任何其他警告。 因此,使用此命令的應用程式可能會中斷而不發出警告。

命令的 DBCC MEMORYSTATUS 輸出已從舊版 SQL Server 變更。 目前,它包含數個在舊版產品中無法使用的數據表。

如何使用 DBCC MEMORYSTATUS

DBCC MEMORYSTATUS 通常用來調查 SQL Server 所報告的低記憶體問題。 如果來自 SQL Server 進程外部的外部記憶體壓力或來自進程內部壓力的內部壓力,可能會發生記憶體不足的情況。 內部壓力可能是由 SQL Server 資料庫引擎或進程內執行的其他元件所造成(例如鏈接的伺服器、XPs、SQLCLR、入侵保護或防病毒軟體)。 如需如何針對記憶體壓力進行疑難解答的詳細資訊,請參閱 針對 SQL Server 中的記憶體不足或記憶體不足問題進行疑難解答。

以下是使用 命令並解譯其結果的一般步驟。 特定案例可能需要您以稍微不同的方式處理輸出,但此處概述整體方法。

  1. 執行 DBCC MEMORYSTATUS 命令。
  2. 使用 [進程/系統計數] 和 [記憶體管理員] 區段來建立是否有外部記憶體壓力(例如,計算機在實體或虛擬記憶體上很低,或 SQL Server 工作集已分頁)。 此外,使用這些區段來判斷 SQL Server 資料庫引擎配置多少記憶體,與系統上的整體記憶體相比。
  3. 如果您建立外部記憶體壓力,請嘗試減少其他應用程式和操作系統的記憶體使用量,或新增更多 RAM。
  4. 如果您建立 SQL Server 引擎使用大部分的記憶體(內部記憶體壓力),您可以使用 的 DBCC MEMORYSTATUS 其餘區段來識別哪些元件(記憶體 clerk、Cachestore、UserStore 或 Objectstore)是此記憶體使用量的最大參與者。
  5. 檢查每個元件: MEMORYCLEARKCACHESTOREUSERSTOREOBJECTSTORE。 檢查其 Pages Allocated 值,以判斷元件在 SQL Server 內耗用多少記憶體。 如需大部分資料庫引擎記憶體元件的簡短描述,請參閱 記憶體 Clerk 類型 數據表。
    1. 在極少數情況下,配置是直接虛擬配置,而不是通過 SQL Server 記憶體管理員。 在這些情況下,檢查特定元件下的 VM 認可值,而不是配置的頁面。
    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 區段提供有關特定記憶體配置器的詳細和特製化資訊。 您可以使用這些區段來瞭解其他詳細數據,並查看記憶體 Clerk 內配置進一步細分。 這類區段的範例包括緩衝池(數據和索引快取)、程式快取/計劃快取、查詢記憶體物件(記憶體授與)、優化佇列和小型和大型網關(優化器記憶體)。 如果您已經知道 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 個字節。
  • 工作集:此值會顯示 SQL Server 進程在 RAM 中擁有的整體虛擬記憶體數量(未分頁)是 430,026,752 個字節。
  • WS 中認可記憶體的百分比:此值會顯示 SQL Server 配置虛擬記憶體的百分比位於 RAM 中(或為工作集)。 100% 的值顯示所有認可的記憶體都會儲存在 RAM 中,且其中 0% 已分頁。
  • 頁面錯誤:此值會顯示 SQL Server 的硬式和軟頁面錯誤的整體數量。 在此範例中,值為 151,138。

其餘四個值為二進位或布爾值。

  • 系統物理記憶體高 值 1 表示 SQL Server 會考慮計算機上可用的物理記憶體很高。 這就是為什麼系統物理記憶體不足的值是0,這表示沒有低記憶體。 類似的邏輯會套用至 處理物理記憶體不足處理虛擬記憶體不足,其中 0 表示其為 false,1 表示其為 true。 在此範例中,這兩個值都是0,這表示SQL Server進程有許多實體和虛擬記憶體。

Memory Manager

本節提供記憶體管理員的範例輸出,其中顯示 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:此值會顯示 SQL Server 已保留的整體虛擬位址空間 (VAS) 或虛擬記憶體 (VM)。 虛擬記憶體保留實際上不會使用物理記憶體;它只是表示虛擬位址會放在大型 VAS 中。 如需詳細資訊,請參閱 VirtualAlloc(),MEM_RESERVE

  • VM 認可:此值會顯示 SQL Server 已認可的虛擬記憶體 (VM) 整體數量(以 KB 為單位)。 這表示進程所使用的記憶體是由物理記憶體所支援,或頁面檔案較不常支援。 先前保留的記憶體位址現在由實體記憶體支援;就是配置它們。 如果已啟用記憶體中鎖定的頁面,SQL Server 會使用替代方法來配置記憶體、AWE API 和大部分的記憶體不會反映在此計數器中。 如需這些配置,請參閱 [已配置鎖定的頁面](#Locked 已配置的頁面)。 如需詳細資訊,請參閱 VirtualAlloc(), MEM_COMMIT

  • 配置的頁面:此值會顯示 SQL Server 資料庫引擎所配置的記憶體頁面總數。

  • 已配置鎖定的頁面:此值代表 SQL Server 使用 AWE API 在實體 RAM 中配置並鎖定的記憶體數量,以 KB 為單位。 它指出 SQL Server 正在使用多少記憶體,並要求保留在記憶體中以將效能優化。 藉由鎖定記憶體中的頁面,SQL Server 可確保重要的資料庫頁面可供使用,且無法交換至磁碟。 如需詳細資訊,請參閱 解決 Windows 延伸模組 (AWE) 記憶體。 值為零表示「記憶體中鎖定的頁面」功能目前已停用,SQL Server 會改用虛擬記憶體。 在這種情況下,VM 認可值會代表配置給 SQL Server 的記憶體。

  • 已配置大型分頁:此值代表 SQL Server 使用大型分頁所配置的記憶體數量。 大型頁面是操作系統所提供的記憶體管理功能。 此功能不使用標準頁面大小(通常是 4 KB),而是使用較大的頁面大小,例如 2 MB 或 4 MB。 值為零表示功能未啟用。 如需詳細資訊,請參閱 Virtual Alloc(), MEM_LARGE_PAGES

  • 目標認可:此值表示 SQL Server 的目標記憶體數量,根據最近的工作負載,SQL Server 可能會取用理想的記憶體數量。

  • 目前認可:此值表示 SQL Server 記憶體管理員目前已認可的操作系統記憶體數量(以 KB 為單位)(在實體存放區中配置)。 此值包含「記憶體中鎖定的頁面」(AWE API) 或虛擬記憶體。 因此,這個值與 VM 認可或已配置之鎖定的頁面接近或相同。 請注意,當 SQL Server 使用 AWE API 時,OS Virtual Memory Manager 仍會配置一些記憶體,並會反映為 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 可能不會對應至硬體節點標識碼。
  • 這些值會顯示在此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 會顯示由特定元件配置給的記憶體頁面總數(記憶體 Clerk、userstore、objectstore 或快取存放區)。

注意

這些節點標識碼會對應至執行 SQL Server 之電腦的 NUMA 節點組態。 節點標識碼包含可能的軟體 NUMA 節點,這些節點定義於硬體 NUMA 節點或 SMP 系統之上。 若要尋找每個節點的節點標識碼與 CPU 之間的對應,請參閱資訊事件標識碼 17152。 當您啟動 SQL Server 時,此事件會記錄在應用程式記錄 事件檢視器。

針對 SMP 系統,您只會看到每個 clerk 類型的一個數據表,而不是計算 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 的 Clerk 所保留的 VAS。 此 API 也稱為 共享記憶體
  • SM 認可:顯示此類型所有使用記憶體對應檔案 API 的 Clerk 所認可的 VAS。

作為替代方法,您可以使用sys.dm_os_memory_clerks動態管理檢視 (DMV),取得所有記憶體節點之每個 clerk 類型的摘要資訊。 若要這樣做,請執行下列查詢:

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

下列清單會討論輸出中的值及其描述:

  • 資料庫:顯示具有資料庫內容(數據和索引頁)的緩衝區數目。
  • 目標:顯示緩衝池的目標大小(緩衝區計數)。 請參閱 本文前幾節中的目標認可 記憶體。
  • Dirty:顯示具有資料庫內容且已修改的頁面。 這些緩衝區包含一般由檢查點進程排清到磁碟的變更。
  • 在 IO 中:顯示正在等候擱置 I/O 作業的緩衝區。 這表示這些頁面的內容會寫入記憶體或從記憶體讀取。
  • 閂鎖:顯示閂鎖緩衝區。 當線程讀取或修改頁面的內容時,緩衝區會閂鎖。 當頁面從磁碟讀取或寫入磁碟時,也會閂鎖緩衝區。 閂鎖可用來在讀取或修改數據時,維護頁面上數據的實體一致性。 相反地,鎖定是用來維護邏輯和交易一致性。
  • IO 錯誤:顯示可能遇到任何 I/O 相關 OS 錯誤的緩衝區計數(這不一定表示問題)。
  • Page Life Expectancy:此計數器會測量最舊頁面停留在緩衝池中的秒數。

您可以使用 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:Plan Cache 物件和 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:顯示 Schema Manager 用來儲存儲存引擎特定元數據的記憶體。
  • SQLCache:顯示用來儲存臨機操作和備妥語句文字的記憶體。
  • 寫:顯示伺服器用於內部復寫子系統的記憶體。
  • ServerGlobal:顯示數個子系統一般使用的全域伺服器記憶體物件。
  • XP Global:顯示擴充預存程式所使用的記憶體。
  • SortTable:顯示排序表所使用的記憶體。

查詢記憶體物件

本節描述查詢記憶體授與資訊。 它也包含查詢記憶體使用量的快照集。 查詢記憶體也稱為「工作區內存」。

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 值是非零,顯示等候查詢計數。
  • 臨界值 - 指出閘道記憶體限制,可決定查詢從何處取得其記憶體,或其保留在哪個網關。 如果查詢不需要超過臨界值,它會停留在小型閘道中(查詢一律以小型閘道開頭)。 如果它需要更多的記憶體進行編譯,它會移至中型記憶體,如果該閾值仍然不足,則會移至大型網關。 針對小型閘道,x64 平臺的臨界值因數為 380,000 個字節(未來版本可能會變更)。
  • 臨界值因數:決定每個閘道的臨界值。 對於小型閘道,因為已預先定義臨界值,因此因素也會設定為相同的值。 中型和大型閘道的臨界值因素是總優化器記憶體的分數(優化佇列中的整體記憶體),且分別設定為 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