DBCC MEMORYSTATUS コマンドを使用して、メモリ使用量を監視SQL Server

この記事では、コマンドを使用してメモリ使用量 DBCC MEMORYSTATUS を監視する方法について説明します。

元の製品バージョン:  SQL Server
元の KB 番号:   907877

概要

この記事では、コマンドの出力について説明 DBCC MEMORYSTATUS します。 このコマンドは、メモリ消費の問題のトラブルシューティングMicrosoft SQL Server頻繁に使用されます。

この記事では、メモリ使用量の概要、集計メモリ情報、バッファー配布情報、バッファー プール情報、プロシージャ キャッシュ情報のメモリ マネージャーの出力の要素について説明します。 また、グローバル メモリ オブジェクト、クエリ メモリ オブジェクト、最適化、およびメモリ ブローカーに関する出力について説明します。

はじめに

この DBCC MEMORYSTATUS コマンドは、現在のメモリ状態のスナップショットを提供SQL Server。 このコマンドの出力を使用して、SQL Serverメモリ消費の問題をトラブルシューティングしたり、特定のメモリ切れエラーのトラブルシューティングを行います。 (メモリ切れエラーの多くは、この出力をエラー ログに自動的に出力します)。Microsoft カスタマー サポート サービスは、メモリの少ない状態に関連付けられている可能性のあるエラーが発生した場合、特定のサポート インシデントの間にこのコマンドの実行を要求する場合もあります。

注意

アドレス ウィンドウの範囲 (AWE) のサポートが有効になっている場合、パフォーマンス モニター (PerfMon) とタスク マネージャーはメモリを正しく考慮しません。

この記事では、コマンドの出力から取得できるデータの一部について説明 DBCC MEMORYSTATUS します。 この記事のいくつかのセクションには、ここでは説明しない独自の実装の詳細が含まれます。 Microsoft カスタマー サポート サービスは、この記事で提供されている情報を超えて、特定のカウンターの意味に関する質問に回答したり、詳細な情報を提供したりは行ないます。

詳細情報

重要

この DBCC MEMORYSTATUS コマンドは、Microsoft カスタマー サポート サービスの診断ツールを意図しています。 出力の形式と提供される詳細レベルは、サービス パックと製品リリースの間で変更される場合があります。 このコマンドで提供される機能は、後の製品バージョンでは別の DBCC MEMORYSTATUS メカニズムに置き換えられる可能性があります。 したがって、それ以降の製品バージョンでは、このコマンドは機能しなくなる可能性があります。 このコマンドを変更または削除する前に、追加の警告は表示されません。 したがって、このコマンドを使用するアプリケーションは警告なしに壊れる可能性があります。

コマンドの出力は DBCC MEMORYSTATUS 、以前のリリースのコマンドから変更SQL Server。 この出力には、以前の製品バージョンでは使用できなかった複数のセクションが含まれるはずです。

メモリ マネージャー

出力の最初のセクションは Memory Manager です。 このセクションでは、ユーザーによる全体的なメモリ消費量SQL Server。

Memory Manager             KB
------------------------------ --------------------
VM Reserved                1761400
VM Committed               1663556
AWE Allocated              0
Reserved Memory            1024
Reserved Memory In Use     0

(5 row(s) affected)

このセクションの要素は次のとおりです。

  • VM 予約済み: この値は、予約済みの仮想アドレス空間 (VAS) SQL Serverを示します。
  • VM のコミット: この値は、ユーザーがコミットした VAS SQL Serverを示します。 コミットされた VAS は物理メモリに関連付けされています。
  • AWE の割り当て: この値は、32 ビット バージョンの AWE メカニズムを使用して割り当てられたメモリの全体的な量をSQL Server。 または、この値は、ロックされたページが製品の 64 ビット バージョンで消費するメモリの全体的な量を示します。
  • 予約メモリ: この値は、専用の管理者接続 (DAC) 用に予約されているメモリを示します。
  • 使用されている予約済みメモリ: この値は、使用されている予約済みメモリを示します。

メモリ使用量の概要

[メモリ マネージャー] セクションの後に、各メモリ ノードのメモリ使用量の概要が表示されます。 非一様メモリ アクセス (NUMA) が有効なシステムでは、ハードウェア NUMA ノードごとに対応するメモリ ノード エントリが存在します。 SMP システムでは、1 つの Memory ノード エントリが作成されます。

注意

メモリ ノード ID がハードウェア ノード ID に対応していない場合があります。

Memory node Id = 0      KB
------------------------------ --------------------
VM Reserved             1757304
VM Committed            1659612
AWE Allocated           0
MultiPage Allocator     10760
SinglePage Allocator    73832

(5 row(s) affected)

注意

これらの値は、この NUMA ノードで実行されているスレッドによって割り当てられるメモリを示します。 これらの値は、NUMA ノードにローカルなメモリではありません。

このセクションの要素は次のとおりです。

  • VM 予約: この値は、このノードで実行されているスレッドによって予約されている VAS を示します。

  • VM Committed: この値は、このノードで実行されているスレッドによってコミットされる VAS を示します。

  • AWE 割り当て: この値は、製品の 32 ビット バージョンの AWE メカニズムを介して割り当てられたメモリを示します。 または、この値は、製品の 64 ビット バージョンのロックされたページによって消費されるメモリの全体的な量を示します。

    NUMA が有効なシステムでは、この値が正しくないか負の値になる可能性があります。 ただし、[メモリ マネージャー] セクションの全体的な AWE の割り当てられた値は正しい値です。 個々の NUMA ノードによって割り当てられたメモリを追跡するには、次のSQL Serverバッファー ノード のパフォーマンス オブジェクトを使用します。 (詳細については、「オンライン ブックSQL Serverを参照してください。

  • MultiPage Allocator: この値は、このノードで実行されているスレッドによってマルチページ アロケーターを介して割り当てられるメモリを示します。 このメモリは、バッファー プールの外部から取得されます。

  • SinglePage Allocator: この値は、このノードで実行されているスレッドによって単一ページアロケーターを介して割り当てられるメモリを示します。 このメモリはバッファー プールから盗まれます。

注意

すべてのメモリ ノードの VM 予約値と VM Committed 値の合計は、[メモリ マネージャー] セクションで報告される対応する値よりわずかに小さい値になります。

集計メモリ

次のセクションには、各店員の種類と NUMA ノードごとに集計メモリ情報が含まれる。 NUMA が有効なシステムの場合、次のような出力が表示される場合があります。

注意

次の表には、出力の一部だけが含まれます。

MEMORYCLERK_SQLGENERAL (node 0) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            592
MultiPage Allocator             2160

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (node 1) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            136
MultiPage Allocator             0

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (Total)  KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            728
MultiPage Allocator             2160

(7 row(s) affected)

注意

これらのノードの ID は、このノードを実行しているコンピューターの NUMA ノード構成SQL Server。 ノードの ID には、ハードウェア NUMA ノードの上または SMP システムの上に定義されている、可能なソフトウェア NUMA ノードが含まれます。 各ノードのノード ID と CPU 間のマッピングを検索するには、Information イベント ID 番号 17152 を表示します。 このイベントは、イベント ビューアーを起動すると、イベント ビューアーのアプリケーション ログにSQL Server。

SMP システムの場合、各店員の種類に対して 1 つのセクションだけが表示されます。 このセクションは、次のようになります。

MEMORYCLERK_SQLGENERAL (Total)     KB
---------------------------------------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
SinglePage Allocator               768
MultiPage Allocator                2160

(7 row(s) affected)

これらのセクションのその他の情報は、共有メモリに関する情報です。

  • SM 予約: この値は、メモリ マップ ファイル API を使用しているこの種のすべての書記によって予約されている VAS を示します。 この API は、共有メモリ とも呼ばれる。

  • SM Committed: この値は、メモリ マップ されたファイル API を使用しているこの種のすべての書記によってコミットされる VAS を示します。

sys を使用すると、すべてのメモリ ノードの書記の種類ごとに概要情報を取得できます。dm_os_memory_clerks 動的管理ビュー (DMV) これを行うには、次のクエリを実行します。

select
type,
sum(virtual_memory_reserved_kb) as [VM Reserved],
sum(virtual_memory_committed_kb) as [VM Committed],
sum(awe_allocated_kb) as [AWE Allocated],
sum(shared_memory_reserved_kb) as [SM Reserved],
sum(shared_memory_committed_kb) as [SM Committed],
sum(multi_pages_kb) as [MultiPage Allocator],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type

バッファーの配布

次のセクションでは、バッファー プール内の 8 KB (KB) バッファーの分布を示します。

Buffer Distribution    Buffers
------------------------------ -----------
Stolen                 553
Free                   103
Cached                 161
Database (clean)       1353
Database (dirty)       38
I/O 0
Latched 0

(7 row(s) affected)

このセクションの要素は次のとおりです。

  • 盗まれた: 盗まれたメモリは、サーバーがさまざまな目的で使用する 8 KB のバッファーを表します。 これらのバッファーは、汎用メモリ ストアの割り当てとして機能します。 サーバーの異なるコンポーネントは、これらのバッファーを使用して内部データ構造を格納します。 レイジーライター プロセスでは、盗まれたバッファーをバッファー プールからフラッシュすることはできません。

  • Free: この値は、現在使用されていないコミットされたバッファーを示します。 これらのバッファーは、データを保持する場合に使用できます。 または、他のコンポーネントがこれらのバッファーを要求し、これらのバッファーを Stolen としてマークする場合があります。

  • キャッシュ: この値は、さまざまなキャッシュに使用されるバッファーを示します。

  • データベース (クリーン): この値は、データベースコンテンツを持ち、変更されていないバッファーを示します。

  • データベース (ダーティ): この値は、データベース コンテンツを持ち、変更されたバッファーを示します。 これらのバッファーには、ディスクにフラッシュする必要がある変更が含まれます。

  • I/O: この値は、保留中の I/O 操作を待機しているバッファーを示します。

  • ラッチ: この値は、ラッチ されたバッファーを示 します。 スレッドがページの内容を読み取りまたは変更するときに、バッファーがラッチされます。 ページがディスクから読み取りまたはディスクに書き込まれるときに、バッファーもラッチされます。 ラッチは、読み取りまたは変更中にページ内のデータの物理的な一貫性を維持するために使用されます。 ロックは、論理とトランザクションの一貫性を維持するために使用されます。

バッファー プールの詳細

DMV を使用すると、データベース ページのバッファー プール バッファーに関する詳細情報を sys.dm_os_buffer_descriptors 取得できます。 また、DMV を使用して、その他のサーバー目的で使用されているバッファー プール ページに関する詳細情報を sys.dm_os_memory_clerks 取得できます。

次のセクションでは、バッファー プールに関する詳細と追加情報を示します。

Buffer Counts             Buffers
------------------------------ --------------------
Committed                 1064
Target                    17551
Hashed                    345
Stolen Potential          121857
External Reservation      645
Min Free                  64
Visible                   17551
Available Paging File     451997

(8 row(s) affected)

このセクションの要素は次のとおりです。

  • コミット済み: この値は、コミットされた合計バッファーを示します。 コミットされたバッファーには、物理メモリが関連付けられている。 Committed 値は、バッファー プールの現在のサイズです。 この値には、AWE サポートが有効になっている場合に割り当てられる物理メモリが含まれます。
  • ターゲット: この値は、バッファー プールのターゲット サイズを示します。 Target 値が Committed 値より大きい場合、バッファー プールは増加しています。 Target 値が Committed 値より小さい場合、バッファー プールは縮小しています。
  • ハッシュ: この値は、バッファー プールに格納されているデータ ページとインデックス ページを示します。
  • 盗まれた可能性: この値は、バッファー プールから盗まれる可能性のある最大ページ数を示します。
  • ExternalReservation: この値は、並べ替え操作またはハッシュ操作を実行するクエリ用に予約されているページを示します。 これらのページはまだ盗まれていない。
  • Min Free: この値は、バッファー プールが空きリストに含もうとするページを示します。
  • Visible: この値は、同時に表示されるバッファーを示します。 これらのバッファーには、同時に直接アクセスできます。 この値は、バッファーの合計と等しくなります。 ただし、AWE サポートが有効になっている場合、この値はバッファーの合計よりも小さい場合があります。
  • 使用可能なページング ファイル: この値は、コミット可能なメモリを示します。 この値は、8 KB バッファーの数として表されます。 詳細については、API のドキュメントの 「GlobalMemoryStatusEx 関数Windows参照してください。

プロシージャ キャッシュ

次のセクションでは、プロシージャ キャッシュの構成について説明します。

Procedure Cache         Value
------------------------------ -----------
TotalProcs              4
TotalPages              25
InUsePages              0

(3 row(s) affected)

このセクションの要素は次のとおりです。

  • TotalProcs: この値は、プロシージャ キャッシュに現在含まれるキャッシュされたオブジェクトの合計を示します。 この値は、DMV 内のエントリと sys.dm_exec_cached_plans 一致します。

    注意

    この情報の動的な性質のため、一致が正確ではない可能性があります。 PerfMon を使用すると、SQL Server: Plan Cache オブジェクトと DMV を監視して、トリガー、プロシージャ、アドホック オブジェクトなどのキャッシュ されたオブジェクトの種類に関する詳細情報 sys.dm_exec_cached_plans を確認できます。

  • TotalPages: この値は、プロシージャ キャッシュ内のすべてのキャッシュ オブジェクトを格納する必要がある累積ページを示します。

  • InUsePages: この値は、現在実行中のプロシージャに属するプロシージャ キャッシュ内のページを示します。 これらのページは破棄できません。

グローバル メモリ オブジェクト

次のセクションでは、さまざまなグローバル メモリ オブジェクトに関する情報を示します。 このセクションには、グローバル メモリ オブジェクトで使用されるメモリの量に関する情報も含まれています。

Global Memory Objects     Buffers
------------------------------ --------------------
Resource                  126
Locks                     85
XDES                      10
SETLS                     2
SE Dataset Allocators     4
SubpDesc Allocators       2
SE SchemaManager          44
SQLCache                  41
Replication               2
ServerGlobal              25
XP Global                 2
SortTables                2

(12 row(s) affected)

このセクションの要素は次のとおりです。

  • リソース: この値は、Resource オブジェクトが使用するメモリを示します。 Resource オブジェクトは、ストレージ エンジンとさまざまなサーバー全体の構造で使用されます。
  • ロック: この値は、ロック マネージャーが使用するメモリを示します。
  • XDES: この値は、トランザクション マネージャーが使用するメモリを示します。
  • SETLS: この値は、スレッド ローカル ストレージを使用するエンジン固有のスレッドStorageを割り当てるのに使用されるメモリを示します。
  • Standard Editionデータセットアロケーター: この値は、Access Methods 設定を使用してテーブル アクセスの構造を割り当てるのに使用される メモリを示 します。
  • SubpDesc Allocators: この値は、並列クエリ、バックアップ操作、復元操作、データベース操作、ファイル操作、ミラーリング、および非同期カーソルのサブプロセスを管理するために使用されるメモリを示します。 これらのサブプロセスは、並列プロセスとも 呼ばれる。
  • Standard EditionSchemaManager: この値は、スキーマ マネージャーがエンジン固有のメタデータを格納Storageメモリを示します。
  • SQLCache: この値は、アドホック ステートメントと準備されたステートメントのテキストを格納するために使用されるメモリを示します。
  • レプリケーション: この値は、サーバーが内部レプリケーション サブシステムに使用するメモリを示します。
  • ServerGlobal: この値は、複数のサブシステムで汎用的に使用されるグローバル サーバー メモリ オブジェクトを示します。
  • XP Global: この値は、拡張ストアド プロシージャで使用されるメモリを示します。
  • テーブルの並べ替え: この値は、テーブルが使用する並べ替えのメモリを示します。

クエリ メモリ オブジェクト

次のセクションでは、クエリ メモリの付与情報について説明します。 このセクションには、クエリメモリ使用量のスナップショットが含まれています。 クエリ メモリは、ワークスペース メモリ とも呼ばれる。

Query Memory Objects             Value
------------------------------ -----------
Grants                           0
Waiting                          0
Available (Buffers)              14820
Maximum (Buffers)                14820
Limit                            10880
Next Request                     0
Waiting For                      0
Cost                             0
Timeout                          0
Wait Time                        0
Last Target                      11520

(11 row(s) affected)

Small Query Memory Objects       Value
------------------------------ -----------

Grants                           0
Waiting                          0
Available (Buffers)              640
Maximum (Buffers)                640
Limit                            640

(5 row(s) affected)

クエリのサイズとコストが"小さい" クエリ メモリのしきい値を満たす場合、クエリは小さなクエリ キューに入れられます。 この動作により、キューに既に存在する大規模なクエリの背後で小さなクエリが遅延する可能性があります。

このセクションの要素は次のとおりです。

  • Grants: この値は、メモリ許可を持つ実行中のクエリを示します。
  • 待機中: この値は、メモリ許可の取得を待機しているクエリを示します。
  • 使用可能: この値は、ハッシュ ワークスペースおよび並べ替えワークスペースとして使用するクエリで使用できるバッファーを示します。 Available 値は定期的に更新されます。
  • 最大値: この値は、ワークスペースとして使用するためにすべてのクエリに与えられる合計バッファーを示します。
  • 制限: この値は、大きなクエリ キューのクエリ実行ターゲットを示します。 この値は、最大 (バッファー) 値がキューに変更されるまで更新されないので、最大 (バッファー) の値とは異なります。
  • 次の要求: この値は、次に待機しているクエリのメモリ要求サイズをバッファーで示します。
  • 待機中: この値は、次の要求値が参照するクエリを実行するために使用できる必要があるメモリの量を示します。 待機中の値は、次の要求の値にヘッドルーム係数を掛けた値です。 この値は、次の待機中のクエリを実行するときに、特定の量のメモリを使用できると効果的に保証されます。
  • コスト: この値は、次に待機しているクエリのコストを示します。
  • タイムアウト: この値は、次の待機クエリのタイムアウトを秒単位で示します。
  • 待機時間: この値は、次の待機クエリがキューに置かれた後の経過時間 (ミリ秒単位) を示します。
  • 最後のターゲット: この値は、クエリ実行の全体的なメモリ制限を示します。 この値は、大きなクエリ キューと小さいクエリ キューの両方に対する結合制限です。

最適化

次のセクションでは、クエリを同時に最適化しようとしているユーザーの概要を示します。

Optimization Queue                 Value
------------------------------ --------------------
Overall Memory                     156672000
Last Notification                  1
Timeout                            6
Early Termination Factor           5

(4 row(s) affected)

Small Gateway                     Value
------------------------------ --------------------
Configured Units                  8
Available Units                   8
Acquires                          0
Waiters                           0
Threshold Factor                  250000
Threshold                         250000

(6 row(s) affected)

Medium Gateway                    Value
------------------------------ --------------------
Configured Units                  2
Available Units                   2
Acquires                          0
Waiters                           0
Threshold Factor                  12

(5 row(s) affected)

Big Gateway                       Value
------------------------------ --------------------
Configured Units                  1
Available Units                   1
Acquires                          0
Waiters                           0
Threshold Factor                  8

(5 row(s) affected)

クエリは、コンパイルのためにサーバーに送信されます。 コンパイル プロセスには、解析、代数化、最適化が含まれます。 クエリは、コンパイル プロセス中に各クエリが消費するメモリの量に基づいて分類されます。

注意

この量には、クエリの実行に必要なメモリは含されません。

クエリが開始されると、コンパイルできるクエリの数に制限はありません。 メモリ使用量が増加し、しきい値に達すると、クエリは続行するためにゲートウェイを渡す必要があります。 各ゲートウェイの後に、同時にコンパイルされたクエリの制限が徐々に減少しています。 各ゲートウェイのサイズは、プラットフォームと負荷によって異なります。 ゲートウェイ のサイズは、スケーラビリティとスループットを最大化するために選択されます。

クエリがゲートウェイを渡できない場合、クエリはメモリが利用可能になるまで待機します。 または、クエリは、タイム アウト エラー (エラー 8628) を返します。 さらに、ユーザーがクエリをキャンセルした場合、またはデッドロックが検出された場合、クエリはゲートウェイを取得しない場合があります。 クエリが複数のゲートウェイを渡した場合、コンパイル プロセスが完了するまで、クエリは小さいゲートウェイを解放します。

この動作では、メモリを大量に消費するコンパイルが同時に発生する場合があります。 さらに、この動作により、小さいクエリのスループットが最大化されます。

メモリ ブローカー

次の 3 つのセクションでは、キャッシュされたメモリ、盗まれたメモリ、および予約メモリを制御するメモリ ブローカーに関する情報を示します。 これらのセクションで提供される情報は、内部診断にのみ使用できます。 したがって、この情報はここでは詳しく説明されません。

MEMORYBROKER_FOR_CACHE        Value
-------------------------------- --------------------
Allocations                   1843
Rate                          0
Target Allocations            1843
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_STEAL        Value
-------------------------------- --------------------
Allocations                   380
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_RESERVE      Value
-------------------------------- --------------------
Allocations                   0
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

適用対象

  • SQL Server 2005 Developer Edition
  • SQL Server 2005 Enterprise Edition
  • SQL Server 2005 Enterprise X64 Edition
  • SQL Server 2005 Standard Edition
  • SQL Server 2005 Standard X64 Edition
  • SQL Server 2005 ワークグループ エディション