2011-05-31 183 views
4

我已經做了一些研究,並通過幾種不同的方法來查看SQL Server實際使用的內存量(因爲任務管理器不準確,因爲SQL將保留爲多的內存,它可以爲自己)SQL內存 - 查看使用的實際內存和可用的內存

我發現這兩種資源是最有用的:

How much RAM is SQL Server actually using?

How to analyze 'dbcc memorystatus' result in SQL Server 2008

不過,我有鬥爭是,當我嘗試這兩種方法在同一臺服務器上,我無法關聯數字。

與查詢「dbcc memorystatus」VM Reserved和VM Committed相比,性能計數器(SQL內存管理器 - 總服務器內存和目標服務器內存)的結果非常不同。

它們都顯示在「KB」中,但數字並沒有接近。也許我沒有看到正確的結果(也許虛擬機保留/提交不是物理內存讀取和計數器是?但在這種情況下,在SQL查詢中它顯示SQL使用的內存量/保留,因爲沒有任何結果看起來像與性能計數器相對應的數字)

如果任何人都可以給我一些指導,記住我在SQL性能監視方面不是很有經驗,我真的很感激它。

預先感謝您。

+0

您是否可以在計數器和DBCC輸出中發佈您正在查看的實際計數器以及您看到的實際數字? – 2011-05-31 18:49:34

回答

12

查看Total Server Memory和Target Server Memory的Perfmon計數器將爲您提供緩衝池緩存的大小,該緩存池緩存是SQL Server使用的全部內存的子集。儘管如此,它通常是最大的單一內存池。例如,在我的開發服務器上,我的總共服務器內存爲2759 MB。您可以使用以下查詢將此號碼取出:

SELECT object_name, counter_name, cntr_value AS 'Total Server Memory (KB)' 
FROM sys.dm_os_performance_counters 
WHERE counter_name = 'Total Server Memory (KB)' 

另一方面,DBCC MEMORYSTATUS顯示大量信息。如果您向下滾動大約3/4,則會看到名爲「緩衝池」和「值」的列的結果集,第一個緩衝池被命名爲「已提交」和「目標」。這兩個值被列爲8 KB頁面,因此將該值乘以8192以獲得以字節爲單位的結果,然後除以1048576以獲得以MB爲單位的結果。在我的開發服務器上,我有353230頁,或2759MB。

DBCC MEMORYSTATUS的第一個結果集爲您提供了由SQL Server保留並提交的虛擬內存(VM)的數量。我會忽略保留,因爲它不是一個很好的指示實際使用的內存量(這是承諾值)。此外,保留比我的所有服務器中的總物理內存高很多。如果您有「分配鎖定頁面」的值,那麼您的「虛擬機已提交」值可能大約爲400 MB - AWE,鎖定頁面不會計入提交費用,這就是爲什麼任務管理器顯示不正確的值。

除非內存管理存在特定問題,否則不應該深入研究DBCC MEMORYSTATUS。我的經驗法則是適當調整緩衝池的大小,讓可用的物理內存很小以避免浪費的內存(〜1-2 GB,但Windows將始終嘗試保持128-256 MB的物理內存可用)以及「峯值提交費用「(來自任務管理器)永遠不會高於服務器中的物理內存量。

+1

非常感謝! – vnat 2011-06-01 11:20:08