web-dev-qa-db-ja.com

異なるDMVからの一貫性のない情報

私は12GBの物理RAMを搭載したサーバーを持っています。 'Max Server Memory (MB)'設定を10GBから8GBに下げました。

Perfmonでプロセスのコミットされたメモリを見ると、次のことがわかります。

select *
from sys.dm_os_performance_counters
where [object_name] like 'SQLServer:Memory Manager%';
go
ターゲットサーバーメモリ(KB):8388608 
合計サーバーメモリ(KB):8388608 

SQLServerがバッファプールから追加の2GBのメモリをすでに解放していることを示しています。

ただし、sys.dm_os_sys_infoを見ると:

select [bpool_committed]
     , [bpool_commit_target]
     , [bpool_visible]
from sys.dm_os_sys_info;
go

一貫性のない結果が得られます:

 bpool_committed = 1048576 
 bpool_commit_target = 1048576 
 bpool_visible = 1048576 

sys.dm_os_sys_infoはパフォーマンスカウンターの情報を反映すべきではありませんか?

Windows Server2003でMicrosoftSQL Server 2005SP1を実行しています。

3
ivanmp

値は確かに一貫性がなく、インスタンスの再起動後に通常に戻りました。

信頼性が低く、代わりにパフォーマンスカウンターを使用するため、この種の情報にはsys.dm_os_sys_infoを使用しないことをお勧めします。

1
ivanmp

矛盾はありません:

1048576 * 8 = 8388608 KB => 8 GB;

Perfmonとsys.dm_os_sys_infoはどちらも8GBを示しています。

[bpool_visible], [bpool_commit_target] and [bpool_committed]-SQL 2005では、これらはすべて「8 KBバッファの数...」http://msdn.Microsoft.com/en -us/library/ms175048(v = sql.90).aspxなので、KBを取得するには結果に8を掛ける必要があります。 SQL 2008 R2以降、乗算を行う必要はありません。

クエリ内で乗算を使用する場合は、次を試してください。

SELECT CAST((bpool_committed * 8) / (1024.0 * 1024.0) AS DECIMAL(20, 2)) AS buffer_pool_committed_memory_in_GB
    , CAST((bpool_commit_target * 8) / (1024.0 * 1024.0) AS DECIMAL(20, 2)) AS buffer_pool_target_memory_in_GB
    , CAST((bpool_visible * 8) / (1024.0 * 1024.0) AS DECIMAL(20, 2)) AS buffer_pool_visible_memory_in_GB 
FROM sys.dm_os_sys_info;
3
Marek Grzymala