web-dev-qa-db-ja.com

sys.dm_os_sys_memoryの解釈

(TSQLのみを使用して)PAGEFILEが使用されているかどうか、および使用されている量を確認する方法を見つけようとしています(これから、windowsfileファイルを参照する場合、pagefileusage%カウンターのように、この用語を大文字にします)。

私の最初の考えは、sys.dm_os_sys_memoryを使用することです。ここでは少し混乱しています。 total_page_file_kbの説明は、これはコミット制限であるため、基本的には、物理​​メモリ(RAM)のサイズ+ PAGEFILEのサイズです。これまでのところ大丈夫です。しかし、正確にはavailable_page_file_kbとは何ですか?それはコミット制限を参照していますか、それともPAGEFILEを参照していますか?私はこれらの計算を使用しようとしました:

available_page_file_kbがコミット制限を参照していると仮定します。

PAGEFILE使用率%=(available_page_file_kb -available_physical_memory_kb)/(total_page_file_kb -total_physical_memory_kb

available_page_file_kbがPAGEFILEを参照していると仮定します

PAGEFILE使用率%=(available_page_file_kb)/(total_page_file_kb -total_physical_memory_kb

残念ながら、これらの計算はどれも正しい結果を示していません。一部のテストサーバーでpagefileusage%カウンターを確認し続けます。最初の数式が1〜3%だけ間違っていて、2番目の数式が15〜25%間違っている、またはその逆、2番目の数式が1〜3%間違っている、 15-25%で最初のもの、

ここで何を逃したのですか? sys.dm_os_sys_memory dmvでpagefileusage%を決定することは不可能ですか?

4
Robert

システムキャッシュおよびカーネルメモリページを考慮する必要があるのでしょうか。

サーバーからいくつかの実際の数値期待するものを質問に追加すると、非常に役立ちます。

たとえば、これが私のテストサーバーのメモリ状態です。

memory stats for a test server

コードは次のとおりです。

SELECT 'Page File' AS MemoryType
    ,CONVERT(DECIMAL(10, 2), 1.0 * total_page_file_kb / 1024) AS Total_MB
    ,CONVERT(DECIMAL(10, 2), 1.0 * available_page_file_kb / 1024) AS Free_MB
    ,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
        100.0 * available_page_file_kb / total_page_file_kb)) + '%' AS Free
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Physical (RAM)'
    ,CONVERT(DECIMAL(10, 2), 1.0 * total_physical_memory_kb / 1024)
    ,CONVERT(DECIMAL(10, 2), 1.0 * available_physical_memory_kb / 1024)
    ,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
        100.0 * available_physical_memory_kb / total_physical_memory_kb)) + '%'
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Non-Physical'
    ,CONVERT(DECIMAL(10, 2),
         1.0 * (total_page_file_kb - total_physical_memory_kb) / 1024)
    ,CONVERT(DECIMAL(10, 2),
         1.0 * (available_page_file_kb - available_physical_memory_kb) / 1024)
    ,CONVERT(VARCHAR(5), CONVERT(DECIMAL(10, 1),
       100.0 * (available_page_file_kb - available_physical_memory_kb)
             / (total_page_file_kb - total_physical_memory_kb))) + '%'
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'System Cache',CONVERT(DECIMAL(10, 2), 1.0 * system_cache_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Kernel: Paged'
    ,CONVERT(DECIMAL(10, 2), 1.0 * kernel_paged_pool_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
UNION ALL
SELECT 'Kernel: Non-Paged'
    ,CONVERT(DECIMAL(10, 2), 1.0 * kernel_nonpaged_pool_kb / 1024),NULL,NULL
FROM sys.dm_os_sys_memory
ORDER BY Total_MB DESC
1
Oreo