SQLServerメモリ
SQLServerのメモリに関するものです。サーバーのメモリが不足している場合は、CPU使用率の問題を解決するために、ハードウェアにメモリを追加することをお勧めします。
ただし、メモリのアップグレードに進む前に、トラブルシューティングの一環として、インスタンスで現在消費されているSQLメモリを確認/計算するにはどうすればよいですか。
例えば:
サーバー名:XXXXXXXXXXXXX
インストールされている物理メモリ(RAM):64.0 GB
現在割り当てられているSQLServerメモリ:58982 MB-> 58.982 GB
この場合、サーバー上にインスタンス(MSSQLSERVER)が1つだけあり、標準に従って80%のメモリがインスタンスに割り当てられています。そして、20%がアプリケーションとOSに割り当てられています。
リソースモニターを確認すると、SQL Serverメモリをそれに設定しているため、80%がいっぱいになっていると表示されます。
ただし、SQLはバックエンドのバッファにある程度のスペースを保持するため、SQLの80%が完全に使用されているわけではありません。サーフィンをしたときに、インスタンスで消費されたSQLメモリを計算するために次の式を取得しましたが、これらのパラメーターはパフォーマンスモニターツールでかなり前に削除されました。
現在、メモリのアップグレードを進めることができるメトリックについて、SQLが80%(OR)からどれだけ使用しているかを確認する方法はありますか?
SQLメモリを計算するための式:(以下のパラメータはパフォーマンスモニターから削除されました)
*Database Usage(GB) = (Totalpages-Freepages-Stolenpages)8/1024=MB/1024=GB
回答
インスタンスで現在消費されているSQLメモリを確認/計算するにはどうすればよいですか。
それは非常に簡単です。あなたは、DMVの持っているsys.dm_os_process_memoryあなたの情報を提供します。それはあなたphysical memory usedとtotal memory used (RAM+Page file)
select (physical_memory_in_use_kb/1024) as Phy_Mem_used_MB, (virtual_address_space_committed_kb/1024) as Total_mem_Used_MB
from sys.dm_os_process_memory
ただし、SQLはバックエンドのバッファにいくらかのスペースを保持するため、SQLの80%が完全に使用されているわけではありません。
SQL Serverがサーバーの最大メモリ値に達すると、メモリ不足の通知でメモリの解放を要求されない限り、SQLServerはそのメモリを保持し続けます。そうです、それはすべてを使用しているわけではないかもしれませんが、それでもそれを保持します。これは、ハードページフォールトの回避に役立つため、キャッシュと呼ばれます。
現在、メモリのアップグレードを進めることができるメトリックについて、SQLが80%(OR)からどれだけ使用しているかを確認する方法はありますか?
一度使用すると言ったように、クエリ処理でそのページを必要としない場合でも、使用されているすべてのメモリが表示されます。新しいリクエストが来ると、これらのページは新しいページ用のスペースを作成するために移動されます。
「利用済み」をどのように定義しますか?1秒前にキャッシュに読み込まれたページは、使用済みとしてカウントされますか?少し前?1時間?一週間?
ポイントは「活用」というものがないということです。SQL Serverは、ページ(およびその他のもの)をメモリに保持します。(内部または外部の)メモリプレッシャーがある場合、従来のキャッシュエージングメカニズム(基本的に)を使用して、最近使用されていないものを削除します。もちろん、メモリ(キャッシュ)の処理についてはさらに詳細がありますが、原則として、他のキャッシュメカニズムと同様に処理されます。
したがって、「利用された」または最適な構成のような概念は存在しません。もちろん、SQLサーバーでまったく使用されていないメモリがたくさんあるかどうかを確認できます。ただし、SQLサーバーがメモリを割り当てた場合、メモリの負荷がない限り、SQLサーバーはメモリを割り当てます。誰が知っている、おそらく誰かが次の秒にそのページを必要とするだろうか?
たとえば、サーバーの最大メモリを減らして、パフォーマンスが低下し始める時期を確認できます。
MemoryManagerInfoここにあるストアドプロシージャを使用します。
https://github.com/aleksey-vitsko/Database-Administrator-Tools
これは、SQL Serverが現在メモリをどのように使用しているかの優れた内訳を提供します。
下のこの図の例を参照してください-これは、私のサーバーが現在消費しているものです。
大まかに言って、Total Server Memory= Database Cache Memory+ Free Memory+ Stolen Server Memory(盗まれたサーバーメモリにはプランキャッシュ、ロックなどが含まれます)