web-dev-qa-db-ja.com

SQL Serverによって使用される合計メモリ(64ビット)

この件に関する私の知識は、パフォーマンスカウンターSQL Server:Memory Manager:Total Server Memoryはバッファプールメモリしか提供しないことを示唆しています。 sys.dm_os_process_memorという名前のDMVにphysical_memory_in_useという列があり、物理的なワーキングセットを提供します。

しかし、私にはわかりません...

64ビットのWindows OSで実行されている64ビットのSQL Server 2008 R2およびSQL 2012のSQL Serverプロセスで使用される合計(バッファープール+非バッファープール、つまりMemToLeave)物理メモリを教えてくれるDMVまたはパフォーマンスカウンターはありますか?

5
SQL Learner

Joe Sack(SQLSkills now)によって提案されたこのソリューションに出くわしました

「プライベートバイト」で非バッファプールメモリ(MemToLeave)を検索

64ビットではプロセス:sqlservr:Private Bytes "がSQL Serverが使用する合計メモリを提供できるように見えます(テスト済みであり、正しいようです)バッファプール+非バッファプール)は、メモリ内のロックページを考慮して有効化されていません。

メモリ内のページのロックが有効になっている場合、プライベートバイトよりも、SQLサーバープロセスで使用される非バッファープールメモリの合計が得られます。

0
SQL Learner

メモリの単一のビューについてはわかりませんが、2つのクエリから情報を取得できます。最初の( Glenn BerryのDMVクエリ から取得)は sys.dm_os_buffer_descriptors を活用し、データベースごとにバッファープールを表示します。

SELECT 
    DB_NAME(database_id) AS [Database Name]
    ,CAST(COUNT(*) * 8/1024.0 AS DECIMAL (10,2))  AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors WITH (NOLOCK)
WHERE database_id not in (1,3,4) -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

sys.dm_os_memory_cache_entries を調べてまとめた2番目のクエリは、非バッファープール情報を表示します。

select 
    name
    ,sum(pages_allocated_count)/128.0 [Cache Size (MB)]
from sys.dm_os_memory_cache_entries
where pages_allocated_count > 0
group by name
order by sum(pages_allocated_count) desc

メモリに関連する DMVのホスト があり、dm_os_memory_*。これらを使用して、SQL Serverによるメモリのさまざまなレベルでの使用状況を調査できます。

3
Mike Fal