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

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

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

簡介

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

命令的 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 資料庫引擎所造成,或是在進程 (內執行的其他元件所造成,例如鏈接的伺服器、XP、SQLCLR、入侵保護或防病毒軟體) 。 如需如何針對記憶體壓力進行疑難解答的詳細資訊,請參閱針對記憶體不足或 SQL Server 記憶體不足問題進行疑難解答

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

  1. 執行 DBCC MEMORYSTATUS 命令。
  2. 使用 [進程/系統計數] 和 [記憶體管理員] 區段來建立是否有外部記憶體壓力 (例如,計算機的實體或虛擬記憶體不足,或 SQL Server 工作集已分頁) 。 此外,請使用這些區段來判斷與系統上的整體記憶體相比,SQL Server 資料庫引擎配置了多少記憶體。
  3. 如果您確定有外部記憶體壓力,請嘗試減少其他應用程式和OS的記憶體使用量,或新增更多 RAM。
  4. 如果您確定 SQL Server 引擎使用大部分的記憶體 (內部記憶體壓力) ,您可以使用 的DBCC MEMORYSTATUS其餘區段來識別哪些元件 (記憶體 clerk、Cachestore、UserStore 或 Objectstore) 是此記憶體使用量的最大參與者。
  5. 檢查每個元件: MEMORYCLEARKCACHESTOREUSERSTOREOBJECTSTORE。 檢查其 Pages Allocated 值,以判斷該元件在 SQL Server 內耗用多少記憶體。 如需大部分資料庫引擎記憶體元件的簡短描述,請參閱 Memory 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程式有許多實體和虛擬記憶體。

記憶體管理員

本節提供記憶體管理員的範例輸出,其中顯示 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 已保留的 VM (VAS) 或虛擬記憶體 (VM) 的整體虛擬地址空間量。 虛擬記憶體保留實際上不會使用物理記憶體;它只是表示虛擬位址會放在大型 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 使用大型頁面所配置的記憶體數量。 大型頁面是操作系統所提供的記憶體管理功能。 此功能不會使用標準頁面大小 (通常為 4 KB) ,而是使用較大的頁面大小,例如 2 MB 或 4 MB。 值為零表示功能未啟用。 如需詳細資訊,請參閱 虛擬配置 () 、MEM_LARGE_PAGES

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

  • 目前已認可:此值表示 SQL Server 記憶體管理員目前已認可 (配置在實體存放區) ) ,操作系統的記憶體 (數量以 KB 為單位。 此值包含 AWE API) 或虛擬記憶體 (「記憶體中鎖定的頁面」。 因此,此值接近或與 VM Committed 或 Locked Pages Allocated 相同。 請注意,當 SQL Server 使用 AWE API 時,某些記憶體仍會由 OS 虛擬記憶體管理員配置,並會反映為 VM 已認可。

  • NUMA 成長階段:此值會指出 SQL Server 目前是否處於 NUMA 成長階段。 如需當機器上有 NUMA 節點時記憶體初始增加的詳細資訊,請參閱運作方式:SQL Server (NUMA 本機、外部和離開記憶體區塊)

  • 上次操作系統錯誤:此值會顯示系統發生記憶體壓力時所發生的最後一個 OS 錯誤。 SQL Server 記錄該 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

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

  • 資料庫:顯示具有資料庫內容 (數據和索引頁) (頁面) 緩衝區數目。
  • 目標:顯示緩衝池的目標大小 (緩衝區計數) 。 請參閱本文先前各節中 的目標認可 記憶體。
  • 已變更:顯示具有資料庫內容並已修改的頁面。 這些緩衝區包含的變更通常必須由檢查點程式排清至磁碟。
  • 在 IO 中:顯示正在等候擱置 I/O 作業的緩衝區。 這表示這些頁面的內容是寫入記憶體或從記憶體讀取。
  • Latched:顯示已閂鎖的緩衝區。 當線程讀取或修改頁面的內容時,會延遲緩衝區。 從磁碟讀取頁面或寫入磁碟時,也會延遲緩衝區。 閂鎖可用來維護頁面上數據在讀取或修改時的實體一致性。 相反地,鎖定是用來維護邏輯和交易一致性。
  • IO 錯誤:顯示可能遇到任何 I/O 相關作業系統錯誤的緩衝區計數 (這不一定表示) 發生問題。
  • 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:計劃快取物件和 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 個並行查詢可以使用來自Small閘道的記憶體 (預設) 、來自中型網關的八個並行查詢,以及一個來自 Big 閘道的查詢。 如先前所述,如果查詢需要比小型閘道所能配置更多的記憶體,則會移至中型閘道,並將該查詢計算為在這兩個網關中取得一個單位。 查詢所需的編譯記憶體數量越大,閘道中設定的單位越少。
  • 可用單位 - 指出從已設定單位清單編譯之並行查詢可用的位置或單位數目。 例如,如果有 32 個單位可用,但目前有三個查詢使用編譯記憶體,則 Available Units 會是 32 減 3 或 29 個單位。
  • Acquires - 指出查詢所取得要編譯的單位或位置數目。 如果目前有三個查詢使用來自閘道的記憶體,則 Acquires = 3。
  • 等候者 - 指出閘道中有多少個查詢正在等候編譯記憶體。 如果閘道中的所有單位都已用盡,則 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