摘要

本文將告訴您 MEMORYSTATUS DBCC 命令的輸出。 這個命令經常用於 Microsoft SQL Server 記憶體耗用問題的疑難排解。

本文說明輸出項的目,記憶體管理員的、 記憶體使用量的摘要、 彙總記憶體資訊、 緩衝區的散發資訊、 緩衝區集區資訊,和程序快取資訊。同時也說明輸出,有關全域記憶體的物件、 查詢記憶體物件,有關最佳化,以及相關記憶體經紀人。

簡介

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

注意效能監視器 (PerfMon)] 及 [工作管理員不做記憶體正確如果已啟用地址視窗化擴充功能 (AWE) 支援。

本文將說明一些您可以從 MEMORYSTATUS DBCC 命令的輸出取得的資料。這份文件的幾個章節會包含不這裡說明的專屬的實作細節。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 配置︰ 這個值會顯示整體透過 AWE 機制,32 位元版本的 SQL Server 上配置的記憶體量。或者,這值的顯示全部的鎖定頁面的記憶體量使用 64 位元版本的產品。

  • 保留的記憶體︰ 此值顯示的保留給專用的管理員連接 (DAC) 的記憶體。


  • 保留使用中的記憶體︰ 此值會顯示正在使用保留的記憶體。

記憶體使用量的摘要

記憶體管理員區段之後緊接著是記憶體中的每個節點的記憶體使用量的摘要。在非統一記憶體存取 (NUMA) 啟用系統中,會有對應的記憶體節點項目,為每個硬體 NUMA 節點。在 SMP 系統中,會有單一的記憶體節點項目。

注意記憶體的節點 ID 不一定對應到硬體節點識別碼。 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 配置︰ 此值會顯示透過 AWE 機制,32 位元版本的產品上配置的記憶體。或者,這個值會顯示全部的由鎖定 64 位元版本的產品上的分頁的記憶體量。

    在 NUMA 啟用系統中,這個值可以是不正確或負數。然而,記憶體管理員區段中的整體AWE 配置值是正確的值。若要追蹤由個別的 NUMA 節點所配置的記憶體,請使用SQL Server︰ 緩衝區節點效能物件。(如需詳細資訊,請參閱SQL Server 線上叢書 》)。

  • MultiPage 的配置器︰ 此值會顯示透過 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)
注意這些節點識別碼會對應到 NUMA 節點的組態執行 SQL Server 的電腦。節點識別碼包括硬體且加入 NUMA 節點上方,或在 SMP 系統所定義的軟體可能且加入 NUMA 節點。若要尋找每個節點的節點 Id 與 Cpu 之間的對應,檢視 「 資訊事件識別碼 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 的所有職員 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],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type

緩衝區散發

下一節會顯示 8 千位元組 (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)
本章節中的項目如下所示︰

  • Stolen: Stolen 記憶體描述 8 KB 的緩衝區伺服器用於其他用途。這些緩衝區會做為泛型的記憶體存放區的配置。伺服器的不同元件會使用這些緩衝區來儲存內部資料結構。延遲寫入器處理無法清除緩衝集區不足的 Stolen 緩衝區。

  • 空閒︰ 此值會顯示目前未使用的認可的緩衝區。這些緩衝區可供存放資料。或者,其他元件可能會要求這些緩衝區,然後將這些緩衝區標示為Stolen。

  • 庫存︰ 此值會顯示適用於各種不同的快取的緩衝區。

  • 資料庫 (乾淨)︰ 此值會顯示具有資料庫內容,且不曾經經過修改的緩衝區。

  • 資料庫 (dirty): 此值會顯示具有資料庫內容,且已修改的緩衝區。這些緩衝區包含變更,必須清除到磁碟。


  • I/O︰ 此值會顯示正在等候的暫止的 I/O 作業的緩衝區。

  • Latched︰ 此值會顯示為鎖存緩衝區。執行緒是讀取或修改網頁的內容時,會為鎖存緩衝區。當正在從磁碟讀取分頁的緩衝區也會為鎖存或寫入磁碟。 閂鎖用來維護實體一致性的網頁中的資料,雖然它正被讀取或修改。鎖定用來維護邏輯與交易的一致性。

緩衝區集區詳細資料

您可以使用sys.dm_os_buffer_descriptors DMV,來取得資料庫分頁的緩衝區集區緩衝區的詳細的資訊。然後,您可以取得時使用的是其他的伺服器而使用sys.dm_os_memory_clerks DMV 的緩衝區集區頁面相關的詳細的資訊。

下一節會列出關於緩衝集區,以及其他資訊的詳細資料。 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 支援配置的實體記憶體。

  • 目標︰ 此值會顯示目標大小的緩衝區集區。如果目標值大於已確認值,與日俱增的緩衝集區。如果目標值是小於已確認的值,壓縮緩衝集區。

  • Hashed︰ 此值會顯示資料頁和儲存在緩衝集區中的索引分頁。

  • 遭竊潛在︰ 此值會顯示可供竊取從緩衝集區的最大頁面。

  • ExternalReservation︰ 此值會顯示已將其保留排序或雜湊作業將會執行的查詢的網頁。這些網頁有未尚未被偷竊。

  • 最小可用︰ 此值會顯示在可用清單上有嘗試緩衝集區的頁面。

  • 看得見︰ 此值會顯示會同時顯示的緩衝區。在此同時,可以直接存取這些緩衝區。這個值等於通常全部的緩衝區。不過,當啟用 AWE 的支援時,這個值可能小於總緩衝區。

  • 可用的分頁檔︰ 此值會顯示使用認可的記憶體。這個值被表示為 8 KB 的緩衝區數目。如需詳細資訊,請參閱 Windows API 文件中的 「 GlobalMemoryStatusEx 函式 」 主題。

程序快取

下一節中描述程序快取的架構。 Procedure Cache Value ------------------------------ -----------
TotalProcs 4
TotalPages 25
InUsePages 0

(3 row(s) affected)
本章節中的項目如下所示︰

  • TotalProcs︰ 此值會顯示目前正在程序快取中的總快取的物件。這個值就會符合sys.dm_exec_cached_plans DMV 中的項目。

    注意由於這項資訊的動態性質,可能無法完全符合項目。您可以使用 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)
本章節中的項目如下所示︰

  • 資源︰ 此值會顯示資源物件使用的記憶體。儲存引擎以及各種的全伺服器的結構,使用資源物件。

  • 鎖定︰ 此值會顯示記憶體該鎖定管理員使用。

  • XDES︰ 此值會顯示記憶體該交易管理員使用。

  • SETLS︰ 此值會顯示用來配置使用執行緒區域儲存區的儲存引擎專用每一執行緒結構的記憶體。

  • 使用資料集 Allocators︰ 此值會顯示用來配置結構,經由存取方法設定的資料表存取的記憶體。

  • SubpDesc Allocators︰ 此值會顯示適用於管理子流程平行查詢、 備份作業、 還原作業,資料庫作業、 檔案作業、 鏡像和非同步的資料指標的記憶體。這些子處理序也稱為是平行的處理程序。

  • SE SchemaManager︰ 此值會顯示結構描述管理員用來儲存儲存引擎特定的中繼資料的記憶體。

  • SQLCache︰ 此值會顯示用來儲存文字及備妥的陳述式的臨機操作的陳述式的記憶體。

  • 複寫︰ 此值會顯示伺服器內部複寫子系統所使用的記憶體。

  • ServerGlobal︰ 此值會顯示數個子系統會代使用通用的伺服器記憶體物件。

  • XP 全域︰ 此值會顯示延伸預存程序使用的記憶體。

  • 排序資料表︰ 此值會顯示記憶體排序資料表使用。

查詢記憶體物件

下一節將告訴您的查詢記憶體授與資訊。本節中的查詢記憶體使用狀況的快照集。查詢記憶體是也就是工作區。 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)
如果大小和查詢的成本滿足 「 小型 」 的查詢記憶體閾值,查詢是放在小型的查詢佇列時。這樣可以阻止延遲較大的查詢已在佇列中後面的較小的查詢。

本章節中的項目如下所示︰

  • 授與︰ 此值顯示有記憶體授與執行查詢。

  • 等待︰ 此值會顯示正在等候取得記憶體授權的查詢。

  • 可用︰ 此值會顯示可供您使用雜湊工作區的查詢,並為排序工作區的緩衝區。可用的值會定期更新。

  • 最大值︰ 此值會顯示可以給所有的查詢,以便為工作區的使用中的全部緩衝區。

  • 限制︰ 此值會顯示查詢執行目標大查詢佇列。這個值與最大值 (緩衝區)值不同,因為直到佇列中的變更將會更新的最大值 (緩衝區)值。

  • 下一個要求︰ 此值會顯示記憶體的要求大小,在下一個等候查詢的緩衝區。

  • 等待︰ 此值會顯示必須執行的下一個要求的值是指的查詢使用的記憶體數量。等待值就是下一個要求值乘以空餘空間因數。這個值可以有效地可保證執行下一個等待查詢時,特定的記憶體數量,都可用。

  • 成本︰ 此值會顯示下一個等候查詢的成本。

  • 逾時︰ 此值會顯示逾時,以秒為單位下, 一個等待查詢。


  • 等候時間︰ 這個值會顯示經過的時間,以毫秒為單位,因為下一個等待查詢放入佇列。

  • 最後一個目標︰ 此值會顯示查詢執行的整體記憶體限制。這個值會是大查詢佇列和小型的查詢佇列組合的限制。

最佳化

下一節是嘗試同時最佳化查詢的使用者的摘要。 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)

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×