web-dev-qa-db-ja.com

ターゲット/合計メモリがmax_server_memoryより大きい

私が持っています max_server_memory実稼働SQLサーバーで141 GBに設定されており、ターゲット/サーバーの合計メモリは144 GBです。

max_server_memoryは、SQL Serverエンジンが使用できるメモリ量を表しますが、それ以上のメモリを使用しているのはなぜですか?

SQL Server 2012 SP3を実行し、160 GBのメモリがインストールされた物理マシン、他のインスタンスはボックスで実行されていませんが、Integration Servicesも実行しています。

75のユーザーデータベースがあり、合計サイズは928 GBです。 columnstoreが使用されているかどうか、またはそれを確認する方法はわかりません。これはベンダーアプリケーションです。

現在、ターゲットメモリは144,384,008で、合計は144,378,261です。

インスタンスは、昨夜の2019-05-01 22:20:21.097 ESTから稼働しています。インスタンスを停止する必要があるインフラストラクチャのメンテナンスがありました。しかし、私はかなり前から、合計/目標が常に144であるのに対し、最大は常に141に設定されていることに気付きました。メインの営業時間のPLEは、月曜日から金曜日の平均で約.5〜1時間で、時々2時間にジャンプします。 。

1
kevinnwhat

最大サーバーメモリ設定は、SQLエンジンが使用できるメモリ量を表すものではありません。 メモリ管理アーキテクチャガイド から:

SQL Server 2012(11.x)以降、SQL Serverは最大サーバーメモリ設定で指定された値より多くのメモリを割り当てる可能性があります。この現象は、合計サーバーメモリ(KB)の値が既にターゲットサーバーメモリ(KB)の設定(最大サーバーメモリで指定)に達している場合に発生することがあります。メモリの断片化が原因で、マルチページメモリ要求(8 KBを超える)の要求を満たすのに十分な連続した空きメモリがない場合、SQL Serverはメモリ要求を拒否する代わりにオーバーコミットを実行できます。

この割り当てが実行されるとすぐに、リソースモニターのバックグラウンドタスクは、割り当てられたメモリを解放するようにすべてのメモリコンシューマーに信号を送り始め、合計サーバーメモリ(KB)の値をターゲットサーバーメモリ(KB)の仕様未満にしようとします。したがって、SQL Serverのメモリ使用量は、最大サーバーメモリ設定を一時的に超える可能性があります。この状況では、合計サーバーメモリ(KB)パフォーマンスカウンターの読み取り値が、最大サーバーメモリとターゲットサーバーメモリ(KB)の設定を超えます。

この動作は通常、次の操作中に発生します。

  • 大規模な列ストアインデックスクエリ。

  • 列ストアインデックス(再)ビルド。大量のメモリを使用してハッシュと並べ替え操作を実行します。

  • 大きなメモリバッファを必要とするバックアップ操作。

  • 大きな入力パラメーターを格納する必要のある操作のトレース。

6
Joe Obbish

合計とターゲットサーバーのメモリをGBで変換して、実際のGB値を確認しましたか? 141 GBに設定されている最大サーバーメモリと比較しているので、GBで値を変換して、最大サーバーメモリよりも実際に大きいかどうかを確認する必要があります。

合計とターゲットサーバーのメモリの両方をGBに変換すると、

Total Server memory= 144,378,261 KB which comes to ((144378261/1024)/1024)= 137.69 GB
Target Server Memory= 144,384,008 KB which comes to (144,384,008/1024)/1024)=137.68 GB

どちらの場合も、合計とターゲットサーバーのメモリは最大サーバーメモリよりも少なくなります。ジョーが引用した内容に同意し、もう少し追加します

最大サーバーメモリは、バッファープール、コンパイルメモリ、すべてのキャッシュ、QEメモリ許可、ロックマネージャーメモリ、およびCLRメモリ(基本的にはdm_os_memory_clerksにある「クラーク」)を含むSQL Serverメモリの割り当てを制御します。スレッドスタック、ヒープ、SQL Server以外のリンクサーバープロバイダー、または「非SQL Server」によって割り当てられたメモリのメモリDLLは、最大サーバーメモリによって制御されません。

したがって、SQL Serverの合計メモリ消費量は、最大サーバーメモリに設定された制限を超える可能性があります。

2つあります

  1. SQL Serverが使用する物理メモリ
  2. SQL Serverが使用する合計メモリ(物理RAM +ページファイル)。

上に到達するには、以下を実行する必要があります

select 
(physical_memory_in_use_kb/1024) total_physical_mem_in_MB
(virtual_address_space_committed_kb/1024) Total_mem_in_mb_RAMAndPagefile
from sys.dm_os_process_memory
0
Shanky