適用対象:SQL Server
SQL Server のインスタンスを定期的に監視し、メモリ使用率が通常の範囲内であることを確認します。
SQL Server の最大メモリの構成
既定では、SQL Server インスタンスは、時間の経過と同時に、サーバー内の使用可能な Windows オペレーティング システム メモリの大部分を消費する可能性があります。 メモリは、いったん取得されると、メモリ不足が検出されない限り、解放されることはありません。 これは仕様であり、SQL Server プロセスのメモリ リークを示すわけではありません。 ほとんどの用途でSQL Server によって取得できるメモリの量を制限するには、Max Server Memory オプションを使用します。 詳細については、「メモリ管理アーキテクチャ ガイド」を参照してください。
SQL Server on Linux では、mssql-conf ツールおよび memory.memorylimitmb 設定を使用して、メモリ制限を設定します。
オペレーティング システムのメモリを監視する
メモリ不足の状況を監視するには、次の Windows サーバー カウンターを使用します。 多くのオペレーティング システムのメモリ カウンターに対しては、動的管理ビュー sys.dm_os_process_memory および sys.dm_os_sys_memory を使用してクエリを実行できます。
メモリ: 使用可能なバイト数 このカウンターは、プロセスで現在使用できるメモリのバイト数を示します。 Available Bytes カウンターの値が小さい場合、オペレーティング システムのメモリが全体的に不足していることを示します。 この値のクエリを実行するには、T-SQL 経由で sys.dm_os_sys_memory.available_physical_memory_kb を使用します。
メモリ: Pages/sec このカウンターは、ハード ページ エラーが原因でディスクから取得されたページの数、またはページ フォールトが原因でワーキング セット内の空き領域にディスクに書き込まれたページの数を示します。 Pages/sec カウンターの値が高い場合、ページングが過剰であることが考えられます。
Page Faults/sec このカウンターは、システム プロセスを含むすべてのプロセスのページ フォールト率を示します。 コンピューターに使用可能なメモリが十分にある場合でも、ディスクへのページングは (したがって、ページ フォールトも)、低い割合で発生するのが一般的です。ただし、ゼロになることはありません。 Microsoft Windows Virtual Memory Manager (VMM) では、プロセスの作業セットのサイズを小さくするときに、SQL Server と他のプロセスからページを取得します。 この VMM の動作が、ページ フォールトの原因になる場合があります。
プロセス: Page Faults/sec このカウンターは、特定のユーザー プロセスのページ フォールト率を示します。 モニタープロセス: Page Faults/sec を監視して、ディスク アクティビティが、SQL Server によるページングが原因で発生しているかどうかを判断します。 SQL Server または他のプロセスが過剰なページングの原因であるかどうかを判断するには、SQL Server プロセス インスタンスの Process: Page Faults/sec カウンターを監視します。
過剰なページングの解決方法の詳細については、オペレーティング システムのマニュアルを参照してください。
SQL Server で使用されるメモリを分離する
SQL Server のメモリ使用量を監視するには、次の 使用 SQL Server オブジェクトを使用します。 多くの SQL Server オブジェクト カウンターには、動的管理ビュー sys.dm_os_performance_counters または sys.dm_os_process_memory を使用してクエリを実行することができます。
既定では、SQL Server は利用可能なシステム リソースに基づいてメモリ要件を動的に管理します。 SQL Server により多くのメモリが必要な場合は、空き物理メモリが使用可能かどうかを調べるためにオペレーティング システムに問い合わせ、使用可能なメモリを使用します。 OS の空きメモリが少ない場合、SQL Server はメモリ不足状態が緩和されるまで、または SQL Server が 最小サーバー メモリ 制限に達するまで、メモリをオペレーティング システムに解放します。 ただし、Min Server Memory および Max Server Memory サーバー構成オプションを使用すると、このオプションをオーバーライドしてメモリを動的に使用できます。 詳細については、「 Server memory configuration options」を参照してください。
SQL Server で使用されるメモリの量を監視するには、次のパフォーマンス カウンターを調べます。
SQL Server: メモリ マネージャー: サーバー メモリの合計 (KB) このカウンターは、SQL Server メモリ マネージャーが現在 SQL Server にコミットしているオペレーティング システムのメモリの量を示します。 この数値は、実際のアクティビティの必要に応じて増加すると予想され、SQL Server の起動後に増加します。 このカウンターのクエリを実行するには、sys.dm_os_sys_info 動的管理ビューを使用し、committed_kb 列を観察します。
SQL Server: メモリ マネージャー: ターゲット サーバー メモリ (KB) このカウンターは、最近のワークロードに基づいて SQL Server が消費できるメモリの理想的な量を示します。 一般的な操作期間後の Total Server Memory と比較して、SQL Server に必要な量のメモリが割り当てられているかどうかを判断します。 一般的な操作後、Total Server Memory と Target Server Memory は近い値になります。 サーバー メモリの合計がターゲット サーバー メモリよりも大幅に低い場合、SQL Server インスタンスでメモリ不足が発生している可能性があります。 SQL Server の起動後の期間に、Total Server Memory が増えるに従って、Total Server Memory は Target Server Memory よりも少なくなると予想されます。 このカウンターのクエリを実行するには、sys.dm_os_sys_info 動的管理ビューを使用し、committed_target_kb 列を観察します。 メモリを構成するためのベスト プラクティスの詳細については、「サーバー メモリの構成オプション」を参照してください。
プロセス: ワーキング セット このカウンターは、オペレーティング システムに従って、現在プロセスで使用されている物理メモリの量を示します。 このカウンターの sqlservr.exe インスタンスを確認します。 このカウンターのクエリを実行するには、sys.dm_os_process_memory 動的管理ビューを使用し、
physical_memory_in_use_kb列を確認します。プロセス: プライベート バイト このカウンターは、プロセスがオペレーティング システムに対して独自の使用を要求したメモリの量を示します。 このカウンターの sqlservr.exe インスタンスを確認します。 このカウンターには、最大 サーバー メモリ オプションによって制限されないものを含め、sqlservr.exe によって要求されたすべてのメモリ割り当てが含まれるため、このカウンターによって、最大サーバー メモリ オプションより大きい値が報告される場合があります。
SQL Server: バッファー マネージャー: データベース ページ このカウンターは、データベース コンテンツを含むバッファー プール内のページ数を示します。 SQL Server プロセス内に他のバッファー以外のプール メモリは含まれません。 このカウンターのクエリを実行するには、sys.dm_os_performance_counters 動的管理ビューを使用します。
SQL Server: バッファー マネージャー: バッファー キャッシュ ヒット率 このカウンターは SQL Server に固有です。 望ましい値は、90 以上です。 90 より大きい値は、データに対するすべての要求の 90% 以上が、ディスクから読み取る必要なく、メモリ内のデータ キャッシュによって満たされたことを示します。 SQL Server バッファー マネージャーの詳細については、 SQL Server のバッファー マネージャー オブジェクトを参照してください。 このカウンターのクエリを実行するには、sys.dm_os_performance_counters 動的管理ビューを使用します。
SQL Server: バッファー マネージャー: ページの平均寿命 このカウンターは、最も古いページがバッファー プールに保持される時間を秒単位で測定します。 NUMA アーキテクチャを使用するシステムでは、これは、すべての NUMA ノード全体の平均です。 より大きい、増加する値が最適です。 急激な低下は、バッファー プールとの間のデータの大幅なチャーンを示し、ワークロードが既にメモリ内のデータの恩恵を完全に受けることができなかったことを示します。 NUMA ノードごとに、独自のバッファー プール ノードがあります。 複数の NUMA ノードを持つサーバーで、 SQL Server: Buffer Node: Page life expectancy 仕様して、各バッファー プール ノードのページの予測保持期間を表示します。 このカウンターのクエリを実行するには、sys.dm_os_performance_counters 動的管理ビューを使用します。
例
現在のメモリ割り当てを確認する
次のクエリにより、現在割り当てられているメモリに関する情報が返されます。
SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024) AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;
SELECT
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,
process_virtual_memory_low
FROM sys.dm_os_process_memory;
SQL Server による現在のメモリ使用率を確認する
次のクエリにより、SQL Server による現在のメモリ使用率に関する情報が返されます。
SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024) AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;
ページの予測保持期間の確認
次のクエリでは、sys.dm_os_performance_counters を使用して、SQL Server インスタンスの現在の page life expectancy 値を、バッファー マネージャー全体のレベルと NUMA ノード別のレベルで観察します。
SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Page life expectancy';