高トラフィック(16000人以上のユーザー、ピーク時に1000人以上の同時ユーザーと推定される)Microsoft Dynamicsデータベースでパフォーマンステストを行っています。
サーバーは数か月前にオンラインになり、現在のトラフィックをどのように処理しているかを確認するためにいくつかのテストを行っています。
営業時間中にいくつかのパフォーマンスカウンターを確認しているときに、ターゲットメモリとサーバーメモリの合計がおかしいと感じました。
ターゲットメモリが合計メモリよりも明らかに高い場合にのみ問題としてフラグを立てますが、おそらく他のカウンタと組み合わせて(差異の量に応じて)、ここでの結果はやや奇妙です。
使用:
SELECT object_name, counter_name, cntr_value FROM sys.dm_os_performance_counters
where (object_name like '%Buffer Manager%' and counter_name like '%page life%')
or (object_name like '%Memory Manager%' and counter_name like '%memory grants pending%')
or (object_name like '%Memory Manager%' and counter_name like '%target server memory%')
or (object_name like '%Memory Manager%' and counter_name like '%total server memory%');
次の結果が得られました。
counter_name | cntr_value
------------------------------------------------
Page life expectancy | 14887
Memory Grants Pending | 0
Target Server Memory (KB) | 44040192
Total Server Memory (KB) | 44040184
明らかに、現在メモリの負荷はなく、ページの平均寿命は必要以上に長くなっています。ただし、ある時点で、SQLサーバーのメモリがちょうど8 KB不足していたようです。
これらの数字について何かが私には奇妙に思えますが、私はそれに指を置くことができません。
これは、ある時点でSQLサーバーがメモリの問題に瀕していたことを示していますか?
これらの数値は非常に似ているので、とりあえず却下して、適切な時間が経過したら再度テストできると思いますか?
これは正常であり、心配する必要はありません。 このブログ は、ターゲットサーバーのメモリの計算方法を示します。下記のフォーラムをご覧ください
Target1 = SQL Serverの現在コミットされているページ+(利用可能な物理メモリ-最小(合計物理メモリページ/ 20、利用可能な物理メモリページ/ 2))
ullAvailPageFile:現在のプロセスがコミットできるメモリの最大量(バイト単位)。この値は、システム全体で使用可能なコミット値以下です。システム全体で使用可能なコミット値を計算するには、GetPerformanceInfoを呼び出し、CommitLimitの値からCommitTotalの値を減算します。
(最大サーバーメモリ<ullAvailPageFile)の場合
{
Target2 =最大サーバーメモリ
}
Else
{
Target2 =合計物理メモリ
}
ターゲットサーバーのメモリ(KB)=最小(ターゲット1、ターゲット2)
したがって、AvailablePhysicalMemoryが非常に高い(または)MaxServermemoryが低い場合、ターゲットサーバーメモリ(KB)は、上記の式から導出されたMaxServerMemory else値を提供します。
ターゲットサーバーのメモリが合計より少し大きい場合でも、この式を使用した私の調査結果によると、問題ありません。そして、これは値の計算方法によるものです。
ターゲットサーバーのメモリが合計サーバーメモリより大きい場合そうでない場合は、常にメモリ不足を意味します。あなたはこの信念から抜け出す必要があります(もしあれば)。あなたが述べたように、他のカウンターは写真に撮らなければなりません。 Sql Serverはターゲットとサーバーの合計メモリ値を何度も変更しますが、これはシステムの負荷に依存します。すべての大きなテーブルに対してインデックスの再構築を実行するシナリオを考えてみてください。大量のアクティビティがあり、PLEは確実に増加するターゲットメモリをドロップしますが、これはメモリの圧迫を意味するものではありません。 SQL Serverのメモリが現在の負荷に合わせて調整されました。
ideal world
RAMこれにより、メモリ内のすべてのデータベースを保留できるようになりますが、これは多くの場合不可能です。