如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
生活随笔
收集整理的這篇文章主要介紹了
如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx
本文介紹輸出的元素的內存管理器、 內存使用情況的摘要、 聚合內存信息、 緩沖區分配信息、 緩沖區池的信息,和過程高速緩存信息。有關全局內存對象、 有關查詢內存對象、 優化,以及內存經紀人還介紹輸出。
注意:性能監視器 (PerfMon) 和任務管理器不能說明內存正確如果啟用地址窗口化擴展 (AWE) 支持。
本文介紹了一些可以從 DBCC MEMORYSTATUS 命令的輸出中獲取的數據。這篇文章的多個部分包括此處未介紹的專用實現詳細信息。Microsoft 客戶支持服務不會回答任何問題或提供有關含義的特定計數器超出本文中提供的信息的詳細信息。
DBCC MEMORYSTATUS 命令的輸出已從 SQL Server 的早期版本。現在,則輸出包含幾個部分,在早期的產品版本中不可用。
注意:內存節點 ID 可能不對應硬件節點 id。
這一節中的元素如下所示︰
注意:下表包含僅輸出的一部分。
對于 SMP 系統中,您將看到每個職員類型只有一個部分。本部分將類似于以下。
可以通過使用sys.dm_os_memory_clerks動態管理視圖 (DMV) 獲取內存中的所有節點的每個職員類型的摘要信息。若要執行此操作,請運行下面的查詢︰
下一節列出關于緩沖區池以及其他信息的詳細信息。
這一節中的元素如下所示︰
注意:此值不包括運行查詢所需的內存。
查詢啟動時,有是沒有限制的可編譯查詢數。內存占用增加并達到某個閾值,該查詢必須通過網關版以繼續。每個網關后逐漸衰減的同時已編譯查詢的限制。每個網關的大小取決于平臺和負載。選擇網關的大小可以實現可縮放性和吞吐量最大化。
如果查詢不能通過一個網關,請查詢將等待,直到有可用的內存。或者,查詢將返回超時錯誤 (錯誤 8628)。此外,查詢可能無法獲得一個網關,如果用戶取消了查詢或檢測到死鎖。如果查詢通過多個網關,查詢編譯過程完成之前不能釋放較小的網關。
此行為可讓只有幾個內存密集型編譯在同一時間發生。此外,這種行為最大化吞吐量較小的查詢。
查看原始的英語文章:907877
概要
本文討論了 DBCC MEMORYSTATUS 命令的輸出。 該命令通常用于診斷 Microsoft SQL Server 內存耗盡問題。本文介紹輸出的元素的內存管理器、 內存使用情況的摘要、 聚合內存信息、 緩沖區分配信息、 緩沖區池的信息,和過程高速緩存信息。有關全局內存對象、 有關查詢內存對象、 優化,以及內存經紀人還介紹輸出。
簡介
DBCC MEMORYSTATUS 命令提供了 Microsoft 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)
- 虛擬機保留︰ 此值顯示 SQL Server 保留的虛擬地址空間 (VAS) 的總數量。
- 虛擬機已提交︰ 此值顯示 SQL Server 已提交的 VAS 的總數量。提交的 VAS 已經與物理內存。
- AWE 分配︰ 此值顯示通過 AWE 機制在 32 位版本的 SQL Server 上分配的內存的總數量。或者,此值的顯示在 64 位版本的產品使用鎖定頁面的內存的總數量。
- 保留的內存︰ 此值顯示為專用的管理員連接 (DAC) 保留的內存。
使用保留內存︰ 此值顯示正在使用保留的內存。
內存使用情況的摘要
內存管理器部分跟內存的每個節點的內存使用情況的摘要。在非統一內存訪問 (NUMA) 啟用系統中,都有相應的內存節點條目為每個硬件 NUMA 節點。在 SMP 系統中,將有一個單一的內存節點項。注意:內存節點 ID 可能不對應硬件節點 id。
Memory node Id = 0 KB ------------------------------ --------------------注意:這些值顯示在此 NUMA 節點上正在運行的線程分配的內存。這些值不是 NUMA 節點的本地內存。
VM Reserved 1757304
VM Committed 1659612
AWE Allocated 0
MultiPage Allocator 10760
SinglePage Allocator 73832
(5 row(s) affected)
這一節中的元素如下所示︰
- 虛擬機保留︰ 此值顯示在此節點正在運行的線程保留 VAS。
- 虛擬機已提交︰ 此值顯示 VAS 提交的此節點運行的線程。
- AWE 分配︰ 此值顯示通過 AWE 機制在 32 位版本的產品分配的內存。或者,此值顯示鎖定的頁上的 64 位版本的產品使用的內存的總數量。
在 NUMA 啟用系統中,此值可能不正確或負面。但是,內存管理器部分中的總體AWE 分配值是正確的值。若要跟蹤單個 NUMA 節點分配的內存,使用SQL Server︰ 緩沖節點的性能對象。(有關詳細信息,請參閱SQL Server 聯機叢書。 - 多頁分配器︰ 此值顯示在此節點正在運行的線程通過多頁分配器分配的內存。此內存來自外部的緩沖池。
- SinglePage 分配器︰ 此值顯示在此節點正在運行的線程通過單頁面分配器分配的內存。此內存是從緩沖池被盜。
聚合的內存
下一節包含每個職員類型和每個 NUMA 節點聚合內存信息。對于 NUMA 啟用系統,可能會看到類似于下面的輸出。注意:下表包含僅輸出的一部分。
MEMORYCLERK_SQLGENERAL (node 0) KB ---------------------------------------------------------------- --------------------注意:這些節點 Id 對應于正在運行 SQL Server 的計算機的 NUMA 節點配置。該節點 Id 包括在硬件 NUMA 節點或 SMP 系統上定義的可能的軟件 NUMA 節點。若要查找每個節點的節點 Id 與 Cpu 之間的映射,查看事件 ID 號為 17152 的信息。當您啟動 SQL Server 時,將在事件查看器應用程序日志中記錄此事件。
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)
對于 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 承諾︰ 此值顯示 VAS 提交的這種使用內存映射文件 API 的所有職員。
可以通過使用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。
- 高速緩存︰ 此值顯示為各種高速緩存使用的緩沖區。
- 數據庫 (干凈)︰ 此值顯示數據庫內容并且尚未修改的緩沖區。
- 數據庫 (臟)︰ 此值顯示具有數據庫的內容和已修改的緩沖區。這些緩沖區包含更改,必須刷新到磁盤。
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 中的條目匹配。
注意:由于此類信息的動態特性,匹配項可能不準確。您可以使用性能監視器來監視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︰ 此值顯示用于分配使用線程本地存儲區的特定于存儲引擎的每個線程結構的內存。
- SE 數據集分配器︰ 此值顯示了用于通過訪問方法設置訪問表的分配結構的內存。
- SubpDesc 分配器︰ 此值顯示了用于管理子過程并行查詢、 備份操作,還原操作、 數據庫操作、 文件操作、 鏡像和異步游標的內存。這些子過程也稱為是并行的進程。
- 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 ------------------------------ --------------------查詢提交給服務器進行編譯。編譯過程包括分析、 algebraization 和優化。查詢分為基于每個查詢將在編譯過程中使用的內存量。
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)
注意:此值不包括運行查詢所需的內存。
查詢啟動時,有是沒有限制的可編譯查詢數。內存占用增加并達到某個閾值,該查詢必須通過網關版以繼續。每個網關后逐漸衰減的同時已編譯查詢的限制。每個網關的大小取決于平臺和負載。選擇網關的大小可以實現可縮放性和吞吐量最大化。
如果查詢不能通過一個網關,請查詢將等待,直到有可用的內存。或者,查詢將返回超時錯誤 (錯誤 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)
屬性
文章 ID:907877 - 上次審閱時間:2017年2月25日 - 修訂版本: 1
這篇文章中的信息適用于: Microsoft SQL Server 2005 Developer Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems, Microsoft SQL Server 2005 Enterprise X64 Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Standard X64 Edition, Microsoft SQL 2005 Server Workgroup, Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems轉載于:https://www.cnblogs.com/zengkefu/p/6984416.html
總結
以上是生活随笔為你收集整理的如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简谈 Java 中的泛型通配符
- 下一篇: 黄山风景区属于那个省