メモリ使用量の監視

適用対象:yesSQL Server (サポートされているすべてのバージョン)

メモリ使用量が一般的なSQL Server範囲内にあるか確認するために、メモリのインスタンスを定期的に監視します。

最大メモリSQL Server構成する

既定では、SQL Serverインスタンスは、サーバーで使用可能なオペレーティング システム メモリWindowsの大部分を時間のWindows消費する可能性があります。 メモリは、いったん取得されると、メモリ不足が検出されない限り、解放されることはありません。 これは設計上であり、プロセスのメモリ リークを示SQL Serverではありません。 max server memory オプションを使用して、ほとんどの用途でSQL Serverできるメモリの量を制限します。 詳細については、「メモリ管理アーキテクチャ ガイド」を参照してください。

SQL Server on Linux では、mssql-conf ツールおよび memory.memorylimitmb 設定を使用して、メモリ制限を設定します。

オペレーティング システムのメモリを監視する

メモリ不足の状況を監視するには、次の Windows サーバー カウンターを使用します。 多くのオペレーティング システムのメモリ カウンターに対しては、動的管理ビュー sys.dm_os_process_memory および sys.dm_os_sys_memory を使用してクエリを実行できます。

  • Memory:Available Bytes
    このカウンターは、プロセスで現在使用できるメモリのバイト数を示します。 Available Bytes カウンターの値が小さい場合、オペレーティング システムのメモリが全体的に不足していることを示します。 この値のクエリを実行するには、T-SQL 経由で sys.dm_os_sys_memory.available_physical_memory_kb を使用します。

  • Memory:Pages/sec
    このカウンターは、ハード ページ フォールトが原因でディスクから取得されたページ数、またはページ フォールトが原因でワーキング セット内の領域を解放するためにディスクに書き込まれたページ数を示します。 Pages/sec カウンターの値が高い場合、ページングが過剰であることが考えられます。

  • Memory:Page Faults/sec このカウンターは、システム プロセスを含むすべてのプロセスのページ フォールト率を示します。 コンピューターに使用可能なメモリが十分にある場合でも、ディスクへのページングは (したがって、ページ フォールトも)、低い割合で発生するのが一般的です。ただし、ゼロになることはありません。 Microsoft Windows Virtual Memory Manager (VMM) は、SQL Server や他のプロセスからページを受け取り、それらのプロセスのワーキング セット サイズをトリミングします。 この VMM の動作が、ページ フォールトの原因になる場合があります。

  • Process:Page Faults/sec このカウンターは、特定のユーザー プロセスのページ フォールト率を示します。 [プロセスの監視]: ページ フォールト/秒。ディスク アクティビティが、ディスク のページングによって発生SQL Server。 または別のプロセスSQL Serverが過剰なページングの原因であるかどうかを判断するには、プロセス インスタンスの Process: Page Faults/sec カウンターを監視SQL Serverします。

過剰なページングの解決方法の詳細については、オペレーティング システムのマニュアルを参照してください。

メモリによって使用されるメモリの分離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 サーバー構成オプションを使用すると、このオプションをオーバーライドしてメモリを動的に使用できます。 詳細については、「 サーバー メモリ オプション」を参照してください。

使用するメモリの量をSQL Server、次のパフォーマンス カウンターを調べてください。

  • SQL Server:Memory Manager:Total Server Memory (KB)
    このカウンターは、メモリ マネージャーが現在コミットしているオペレーティング システムSQL Serverメモリの量を示SQL Server。 この数値は、実際のアクティビティの必要に応じて増加すると予想され、SQL Server の起動後に増加します。 このカウンターのクエリを実行するには、sys.dm_os_sys_info 動的管理ビューを使用し、committed_kb 列を観察します。

  • SQL Server:Memory Manager:Target Server Memory (KB)
    このカウンターは、最近のワークロードに基づいて、SQL Server可能なメモリ量を示します。 一般的な操作の後のサーバー メモリの合計と比較して、SQL Server量のメモリが割り当てられているかどうかを判断します。 一般的な操作後、Total Server MemoryTarget Server Memory は近い値になります。 サーバー メモリの合計がターゲット サーバー メモリより大幅に小さい場合は、SQL Serverが発生している可能性があります。 起動後のSQL Server、サーバー メモリの合計が増加すると、ターゲット サーバー メモリよりも小さいと予想されます このカウンターのクエリを実行するには、sys.dm_os_sys_info 動的管理ビューを使用し、committed_target_kb 列を観察します。 メモリを構成するためのベスト プラクティスの詳細については、「サーバー メモリの構成オプション」を参照してください。

  • Process:Working Set
    このカウンターは、オペレーティング システムに応じて、現在プロセスで使用中の物理メモリの量を示します。 このカウンターの sqlservr.exe インスタンスを確認します。 このカウンターのクエリを実行するには、sys.dm_os_process_memory 動的管理ビューを使用し、physical_memory_in_use_kb 列を観察します。

  • Process:Private Bytes
    このカウンターは、プロセスにより、独自に使用するためにオペレーティング システムに対して要求されたメモリの量を示します。 このカウンターの sqlservr.exe インスタンスを確認します。 このカウンターには、Max Server Memory オプションによって制限されないものを含め、sqlservr.exe によって要求されたすべてのメモリ割り当てが含まれるため、このカウンターによって、Max Server Memory オプションより大きい値が報告される場合があります。

  • SQL Server:Buffer Manager:Database Pages
    このカウンターは、データベースの内容が含まれたバッファー プール内のページの数を示します。 SQL Server プロセス内のバッファー プール以外の他のメモリは含まれません。 このカウンターのクエリを実行するには、sys.dm_os_performance_counters 動的管理ビューを使用します。

  • SQL Server:Buffer Manager:Buffer Cache Hit Ratio
    このカウンターは、このカウンターに固有SQL Server。 望ましい値は、90 以上です。 90 より大きい値は、データに対するすべての要求の 90% 以上が、ディスクから読み取る必要なく、メモリ内のデータ キャッシュによって満たされたことを示します。 SQL Server バッファー マネージャーの詳細については、SQL Server バッファー マネージャー オブジェクトに関する記事を参照してください。 このカウンターのクエリを実行するには、sys.dm_os_performance_counters 動的管理ビューを使用します。

  • SQL Server:Buffer Manager:Page life expectancy
    このカウンターは、最も古いページがバッファー プールに保持される時間を秒単位で測定します。 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 インスタンスの現在のページsys.dm_os_performance_countersの予測予測値を、バッファー マネージャー レベル全体と各 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';

関連項目