使用 DBCC MEMORYSTATUS 命令監控 SQL Server 上的記憶體使用量

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

原始產品版本:   Sqlserver
原始 KB 編號:   907877

摘要

本文將討論命令的輸出 DBCC MEMORYSTATUS 。 這個命令常常用來疑難排解 Microsoft SQL Server 記憶體耗用問題。

本文說明記憶體管理員的輸出元素、記憶體使用量摘要、緩衝區發佈資訊的摘要記憶體資訊、緩衝區集資訊的摘要,以及程式快取資訊的摘要。 此外,它也會說明關於全域記憶體物件的輸出,關於查詢記憶體物件,關於優化,以及關於記憶體代理人的輸出。

簡介

DBCC MEMORYSTATUS命令會提供 SQL Server 目前記憶體狀態的快照。 您可以使用此命令的輸出來疑難排解 SQL Server 中的記憶體消耗問題,或疑難排解特定的記憶體不足錯誤。 (許多記憶體不足錯誤會在錯誤記錄中自動列印此輸出。 ) Microsoft 客戶支援服務也可能會要求您在特定支援事件期間執行此命令,如果您遇到的錯誤可能與低記憶體狀況相關聯。

注意

效能監視器 (PerfMon) 和工作管理員若已啟用 (AWE) 支援,請勿正確處理記憶體的記憶體。

本文說明您可以從命令輸出中取得的部分資料 DBCC MEMORYSTATUS 。 本文的數個章節包括這裡未說明的專有執行細節。 Microsoft 客戶支援服務不會回答任何問題,也不會提供與本文所提供之資訊之外之特定計數器的意義相關的詳細資訊。

詳細資訊

重要

DBCC MEMORYSTATUS 命令主要是 Microsoft 客戶支援服務的診斷工具。 輸出的格式和所提供的詳細資料層級取決於 service pack 與產品版本之間的變更。 命令提供的功能 DBCC MEMORYSTATUS 可能會由後續產品版本中的不同機制所取代。 因此,在以後的產品版本中,此命令可能不再起作用。 在變更或移除此命令之前,不會進行額外的警告。 因此,使用此命令的應用程式可能會中斷,而不會出現警告。

命令的輸出 DBCC MEMORYSTATUS 已從舊版的 SQL Server 變更。 輸出現在包含數個章節無法在舊版產品中使用。

記憶體管理員

輸出的第一個區段是記憶體管理員。 本節顯示 SQL Server 的整體記憶體使用量。

Memory Manager             KB
------------------------------ --------------------
VM Reserved                1761400
VM Committed               1663556
AWE Allocated              0
Reserved Memory            1024
Reserved Memory In Use     0

(5 row(s) affected)

本節中的元素如下:

  • 已保留 VM:此值會顯示 SQL Server 保留 (VAS) 的總虛擬位址空間量。
  • 已認可 VM:此值會顯示 SQL Server 認可的整體 VAS 量。 已認可的 VAS 與實體記憶體相關聯。
  • 已分配 AWE:此值會顯示透過32位版本的 SQL Server 上的 AWE 機制所分配的總記憶體量。 或者,此值會顯示鎖定頁面在64位版本產品上消耗的整體記憶體量。
  • 保留記憶體:此值會顯示為專用管理員連接保留的記憶體 (DAC) 。
  • 保留記憶體使用中:此值會顯示所使用的保留記憶體。

記憶體使用量摘要

[記憶體管理員] 區段後面接著每個記憶體節點的記憶體使用量摘要。 在非統一記憶體存取中 (NUMA) 啟用系統,每個硬體 NUMA 節點會有對應的記憶體節點專案。 在 SMP 系統中,會有一個記憶體節點專案。

注意

記憶體節點識別碼可能不會對應至硬體節點識別碼。

Memory node Id = 0      KB
------------------------------ --------------------
VM Reserved             1757304
VM Committed            1659612
AWE Allocated           0
MultiPage Allocator     10760
SinglePage Allocator    73832

(5 row(s) affected)

注意

這些值會顯示此 NUMA 節點上執行的執行緒所指派的記憶體。 這些值不是 NUMA 節點的本機記憶體。

本節中的元素如下:

  • 已保留 VM:此值顯示由此節點上執行的執行緒所保留的 VAS。

  • 已認可 VM:此值顯示由此節點上執行的執行緒所認可的 VAS。

  • 已分配 AWE:此值會顯示透過32位版本產品的 AWE 機制所分配的記憶體。 或者,此值會顯示64位版本產品的鎖定頁面所耗用的總記憶體量。

    在啟用 NUMA 的系統中,此值可以是不正確或負數。 不過,[記憶體管理員] 區段中的整體 AWE 指派值是正確的值。 若要追蹤個別 NUMA 節點所指派的記憶體,請使用 SQL Server:緩衝區節點 performance 物件。 (如需詳細資訊,請參閱 SQL Server 線上叢書。 )

  • MultiPage 指派者:此值會顯示透過此節點上執行的執行緒,透過多頁面分配所進行的記憶體。 此記憶體來自緩衝區集區外。

  • SinglePage 分配器:此值會顯示透過此節點上執行的執行緒,透過單一頁面分配所分配的記憶體。 此記憶體會從緩衝集區盜取。

注意

在所有記憶體節點上,VM 保留值與 VM 認可值的總和會稍小於記憶體管理員區段中所報告的對應值。

匯總記憶體

下一節包含每個職員類型及每個 NUMA 節點的匯總記憶體資訊。 在啟用 NUMA 的系統中,您可能會看到類似下列的輸出。

注意

下表僅包含輸出的一部分。

MEMORYCLERK_SQLGENERAL (node 0) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            592
MultiPage Allocator             2160

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (node 1) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            136
MultiPage Allocator             0

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (Total)  KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            728
MultiPage Allocator             2160

(7 row(s) affected)

注意

這些節點 IDs 會對應至執行 SQL Server 之電腦的 NUMA 節點設定。 節點 IDs 包含可能的軟體 NUMA 節點,該節點是定義在硬體 NUMA 節點上,或位於 SMP 系統之上。 若要尋找各節點的節點 IDs 和 CPUs 之間的對應,請查看資訊事件識別碼號碼17152。 當您啟動 SQL Server 時,此事件會記錄在事件檢視器的應用程式記錄檔中。

針對 SMP 系統,您只會看到每個職員類型的區段。 本節類似如下所示。

MEMORYCLERK_SQLGENERAL (Total)     KB
---------------------------------------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
SinglePage Allocator               768
MultiPage Allocator                2160

(7 row(s) affected)

這些區段中的其他資訊是關於共用記憶體:

  • SM 保留:此值會顯示由此種類之所有使用記憶體對應檔案 API 的 clerks 所保留的 VAS。 此 API 也稱為 共用記憶體

  • SM 認可:此值會顯示所有使用記憶體對應檔案 API 之 clerks 的 VAS 所認可的功能。

您可以使用 sys 取得所有記憶體節點之每個職員類型的摘要資訊。dm_os_memory_clerks 動態管理 view (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],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type

緩衝區分配

下一節將顯示緩衝區集區中 8 kb (KB) 緩衝區的散佈。

Buffer Distribution    Buffers
------------------------------ -----------
Stolen                 553
Free                   103
Cached                 161
Database (clean)       1353
Database (dirty)       38
I/O 0
Latched 0

(7 row(s) affected)

本節中的元素如下:

  • 失竊:失竊記憶體會描述伺服器出於其他目的所使用的 8 KB 緩衝區。 這些緩衝區用作一般記憶體存放區分配。 伺服器的不同元件使用這些緩衝區來儲存內部資料結構。 惰性寫入器處理常式不允許從緩衝集區清除已竊取的緩衝區。

  • Free:此值會顯示目前未使用的認可緩衝區。 這些緩衝區可用於存放資料。 或者,其他元件可能要求這些緩衝區,然後將這些緩衝區標記為「已失竊」。

  • 快取:此值顯示用於各種快取的緩衝區。

  • 資料庫 (清理) :此值會顯示具有資料庫內容及未修改之緩衝區。

  • 資料庫 (髒) :此值會顯示具有資料庫內容及已修改的緩衝區。 這些緩衝區包含必須清除至磁片的變更。

  • I/O:此值會顯示等候等候中 I/O 作業的緩衝區。

  • 鎖定:此值會顯示 鎖定 的緩衝區。 當執行緒讀取或修改頁面的內容時,會鎖定緩衝區。 當頁面從磁片讀取或寫入磁片時,也會鎖定緩衝區。 當讀取或修改頁面中的資料時,會使用閂鎖來維護其實際的一致性。 鎖定是用來維護邏輯與事務的一致性。

緩衝集區詳細資料

您可以使用 DMV 取得資料庫頁面之緩衝集區緩衝區的詳細資訊 sys.dm_os_buffer_descriptors 。 您也可以使用 DMV,取得用於其他伺服器用途之緩衝集區頁面的詳細資訊 sys.dm_os_memory_clerks

下一節將列出緩衝區集區的詳細資訊,以及其他資訊。

Buffer Counts             Buffers
------------------------------ --------------------
Committed                 1064
Target                    17551
Hashed                    345
Stolen Potential          121857
External Reservation      645
Min Free                  64
Visible                   17551
Available Paging File     451997

(8 row(s) affected)

本節中的元素如下:

  • 已認可:此值會顯示認可的總緩衝區。 認可的緩衝區具有與其相關聯的實體記憶體。 認可值是緩衝區集區的目前大小。 此值包括已啟用 AWE 支援時所分配的實體記憶體。
  • 目標:此值會顯示緩衝區集區的目標大小。 如果目標值大於認可值,則緩衝集區不斷增加。 如果目標值小於認可的值,緩衝集區便會縮小。
  • 已散列:此值會顯示儲存在緩衝集區中的資料頁面和索引頁面。
  • 盜竊的潛在專案:此值會顯示可從緩衝集區失竊的頁面數目上限。
  • ExternalReservation:這個值會顯示已為執行排序作業或雜湊作業的查詢所保留的頁面。 這些頁面尚未遭竊。
  • 空閒空閒:此值會顯示緩衝區集區在可用清單中嘗試的頁面。
  • Visible:此值會顯示同時可見的緩衝區。 您可以直接存取這些緩衝區。 這個值相當於總緩衝區。 不過,當啟用 AWE 支援時,這個值可能會小於總緩衝區。
  • 可用分頁檔:此值會顯示可以認可的記憶體。 這個值會以 8 KB 緩衝區的數目來表示。 如需詳細資訊,請參閱 Windows API 檔中的 GlobalMemoryStatusEx 函數 主題。

過程快取

下一節將說明過程快取的構成。

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

(3 row(s) affected)

本節中的元素如下:

  • TotalProcs:這個值會顯示目前在程式快取中快取的物件總數。 這個值會比對 DMV 中的專案 sys.dm_exec_cached_plans

    注意

    因為此資訊的動態性質,所以相符可能不完全。 您可以使用 PerfMon 來監視 SQL Server:規劃快取物件和 sys.dm_exec_cached_plans DMV,以取得快取物件類型的詳細資訊,例如觸發器、程式及特殊物件。

  • TotalPages:這個值會顯示在程式快取中儲存所有快取物件所需的累計頁面。

  • InUsePages:這個值會顯示屬於目前執行的程式快取中的頁面。 無法捨棄這些頁面。

全域記憶體物件

下一節包含各種通用記憶體物件的相關資訊。 本節也包含全域記憶體物件使用多少記憶體的相關資訊。

Global Memory Objects     Buffers
------------------------------ --------------------
Resource                  126
Locks                     85
XDES                      10
SETLS                     2
SE Dataset Allocators     4
SubpDesc Allocators       2
SE SchemaManager          44
SQLCache                  41
Replication               2
ServerGlobal              25
XP Global                 2
SortTables                2

(12 row(s) affected)

本節中的元素如下:

  • Resource:此值會顯示 Resource 物件使用的記憶體。 Resource 物件是由儲存引擎和各種伺服器範圍的結構使用。
  • 鎖定:此值會顯示鎖定管理員使用的記憶體。
  • XDES:這個值會顯示交易管理員使用的記憶體。
  • SETLS:這個值會顯示用來為使用執行緒本機儲存區之每個執行緒的儲存引擎指派的記憶體。
  • SE 資料集 Allocators:這個值會顯示用來透過 Access 方法 設定來指派資料表存取的記憶體。
  • SubpDesc Allocators:這個值會顯示用來管理平行查詢、備份作業、還原作業、資料庫作業、檔案作業、鏡像及非同步資料指標的子流程時所使用的記憶體。 這些子流程也稱為 平行處理 程式。
  • SE SchemaManager:這個值會顯示架構管理員用來儲存儲存引擎特有中繼資料的記憶體。
  • SQLCache:這個值會顯示用來儲存特別語句及已準備語句之文字的記憶體。
  • 複寫:此值會顯示伺服器用於內部複寫子系統的記憶體。
  • ServerGlobal:這個值會顯示由多個子系統一般使用的全域伺服器記憶體物件。
  • XP Global:這個值會顯示擴充的預存程式使用的記憶體。
  • 排序表格:此值會顯示排序資料表使用的記憶體。

查詢記憶體物件

下一節將說明查詢記憶體授與資訊。 本節包含查詢記憶體使用量的快照。 查詢記憶體也稱為 工作區記憶體

Query Memory Objects             Value
------------------------------ -----------
Grants                           0
Waiting                          0
Available (Buffers)              14820
Maximum (Buffers)                14820
Limit                            10880
Next Request                     0
Waiting For                      0
Cost                             0
Timeout                          0
Wait Time                        0
Last Target                      11520

(11 row(s) affected)

Small Query Memory Objects       Value
------------------------------ -----------

Grants                           0
Waiting                          0
Available (Buffers)              640
Maximum (Buffers)                640
Limit                            640

(5 row(s) affected)

如果查詢的大小和成本為 "small" 查詢記憶體閥值,則查詢會放入小型查詢佇列中。 這種行為可防止較小的查詢延遲在佇列中已有較大的查詢之後。

本節中的元素如下:

  • 授與:此值顯示具有記憶體授與的執行查詢。
  • 等待:此值會顯示等候取得記憶體授的查詢。
  • 可用:此值顯示可供查詢用來做為雜湊工作區及排序工作區的緩衝區。 可用的值會定期更新。
  • Maximum:此值顯示可提供給所有查詢以做為 workspace 的總緩衝區。
  • Limit:此值會顯示大型查詢佇列的查詢執行目標。 這個值與最大 (緩衝) 值不同,因為 (緩衝區) 值的最大值直到佇列中的變更才會更新。
  • 下一個要求:此值會顯示下一個等候查詢的記憶體要求大小(以緩衝區為單位)。
  • 等候:此值顯示必須可用於執行下一個要求值所參照之查詢的記憶體量。 [等候值] 是下一個要求值乘以多餘因數因數。 這個值可有效地保證當執行下一個等候查詢時,會有特定數量的記憶體可供使用。
  • Cost:此值會顯示下一個等候查詢的成本。
  • Timeout:此值會顯示下一個等候查詢的超時時間(以秒為單位)。
  • 等候時間:此值會顯示從佇列中放入下一個等候查詢以來經過的時間(毫秒)。
  • 最後一個目標:此值會顯示查詢執行的整體記憶體限制。 這個值是大型查詢佇列及小型查詢佇列的合併限制。

優化

下一節是同時嘗試優化查詢的使用者摘要。

Optimization Queue                 Value
------------------------------ --------------------
Overall Memory                     156672000
Last Notification                  1
Timeout                            6
Early Termination Factor           5

(4 row(s) affected)

Small Gateway                     Value
------------------------------ --------------------
Configured Units                  8
Available Units                   8
Acquires                          0
Waiters                           0
Threshold Factor                  250000
Threshold                         250000

(6 row(s) affected)

Medium Gateway                    Value
------------------------------ --------------------
Configured Units                  2
Available Units                   2
Acquires                          0
Waiters                           0
Threshold Factor                  12

(5 row(s) affected)

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

(5 row(s) affected)

查詢會送出至伺服器進行編譯。 編譯過程包括剖析、algebraization 及優化。 根據每個查詢在編譯過程中會消耗的記憶體量,對查詢進行分類。

注意

此數量不含執行查詢所需的記憶體。

當查詢開始時,不會限制可搜集的查詢數目。 當記憶體使用量增加並達到臨界值時,查詢必須傳遞閘道才能繼續。 在每個閘道之後,同時編譯的查詢會逐漸減少限制。 每個閘道的大小取決於平臺和負載。 會選擇閘道大小,以最大化可伸縮性和輸送量。

如果查詢無法傳遞閘道,則查詢會等到有可用記憶體為止。 或者,查詢會傳回逾時錯誤 (錯誤 8628) 。 此外,如果使用者取消查詢或偵測到鎖死,查詢可能無法取得閘道。 如果查詢傳遞數個閘道,則在完成編譯過程之前,查詢不會放開較小的閘道。

此行為可讓您在同一時間只會進行少數大量佔用記憶體的編譯。 此外,此行為會最大化小型查詢的輸送量。

記憶體代理

下列三個區段會顯示控制快取記憶體、失竊記憶體和保留記憶體之記憶體代理人的相關資訊。 這些區段所提供的資訊僅可用於內部診斷。 因此,此處並未詳述此資訊。

MEMORYBROKER_FOR_CACHE        Value
-------------------------------- --------------------
Allocations                   1843
Rate                          0
Target Allocations            1843
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_STEAL        Value
-------------------------------- --------------------
Allocations                   380
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_RESERVE      Value
-------------------------------- --------------------
Allocations                   0
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

適用於

  • SQL Server 2005 開發人員版
  • SQL Server 2005 Enterprise Edition
  • SQL Server 2005 Enterprise X64 Edition
  • SQL Server 2005 Standard Edition
  • SQL Server 2005 Standard X64 Edition
  • SQL Server 2005 Workgroup Edition