現在オフラインです。再接続するためにインターネットの接続を待っています

DBCC MEMORYSTATUS コマンドを使用して SQL Server 2005 のメモリ使用量を監視する方法

概要
この資料では、DBCC MEMORYSTATUS コマンドの出力について説明します。このコマンドは、Microsoft SQL Server のメモリ消費に関する問題のトラブルシューティングによく使用されます。

この資料では、メモリ マネージャ、メモリ使用量の概要、集計メモリ情報、バッファの配分情報、バッファ プール情報、およびプロシージャ キャッシュ情報に関する出力要素について説明します。また、グローバル メモリ オブジェクト、クエリ メモリ オブジェクト、最適化、およびメモリ ブローカに関する出力について説明します。
はじめに
DBCC MEMORYSTATUS コマンドを実行すると、Microsoft SQL Server の現在のメモリ状態のスナップショットが表示されます。このコマンドの出力を使用して、SQL Server のメモリ消費に関する問題、および特定のメモリ不足エラー (メモリ不足エラーの多くでは、自動的にこの出力がエラー ログに記載されます) のトラブルシューティングを行うことができます。メモリ不足との関連が考えられるエラーが発生している場合のサポートでは、Microsoft Customer Support Services から、このコマンドの実行をユーザーに依頼することがあります。

: Address Windowing Extentions (AWE) サポートが有効な場合、パフォーマンス モニタ (PerfMon) やタスク マネージャではメモリが正しく計算されません。

この資料では、DBCC MEMORYSTATUS コマンドの出力から得られるデータの一部について説明します。この資料のいくつかのセクションには、専用の実装情報が含まれていますが、ここでは詳しく説明しません。Microsoft Customer Support Services では、特定のカウンタの意味について、この資料に記載されている以外の情報を提供することや、質問に回答することはありません。
詳細
重要 : DBCC MEMORYSTATUS コマンドは、Microsoft Customer Support Services 用の診断ツールです。提供される出力の書式や詳細のレベルは、Service Pack および製品リリースごとに変更されることがあります。DBCC MEMORYSTATUS コマンドによって提供される機能は、今後の製品バージョンで別の機能に置き換えられる場合があります。このため、今後の製品バージョンではこのコマンドは機能しない場合があります。このコマンドが将来変更および削除されるときに警告は行いません。このため、このコマンドを使用するアプリケーションは、警告なしに停止する場合があります。

DBCC MEMORYSTATUS コマンドの出力は、SQL Server の以前のリリースから変更されました。現在の出力には、以前の製品バージョンで利用できなかったいくつかのセクションがあります。

メモリ マネージャ

出力の最初のセクションはメモリ マネージャです。ここには、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 Reserved : この値は、SQL Server が予約している仮想アドレス空間 (VAS) の全体量を示します。
  • VM Committed : この値は、SQL Server がコミットしている VAS の全体量を示します。コミットされた VAS は、物理メモリに関連付けられています。
  • AWE Allocated : この値は、32 ビット版の SQL Server で AWE 機構によって割り当てられたメモリの全体量を示します。または、64 ビット版の SQL Server でロックされたページによって消費されるメモリの全体量を示します。
  • Reserved Memory : この値は、専用管理者接続 (DAC) 用に予約されたメモリを示します。
  • Reserved Memory In Use : この値は、使用中の予約されたメモリを示します。

メモリ使用量の概要

メモリ マネージャ セクションの後に、各メモリ ノードのメモリ使用量の概要が表示されます。NUMA (Non-uniform Memory Access) 対応のシステムでは、各ハードウェア NUMA ノードに対応するメモリ ノードの項目があります。SMP システムの場合、メモリ ノードの項目は 1 つです。

: メモリ ノード 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 Reserved : この値は、このノードで実行中のスレッドによって予約された VAS を示します。
  • VM Committed : この値は、このノードで実行中のスレッドによってコミットされた VAS を示します。
  • AWE Allocated : この値は、32 ビット版の製品で AWE 機構によって割り当てられたメモリを示します。または、64 ビット版の製品でロックされたページによって消費されるメモリの全体量を示します。

    NUMA 対応のシステムでは、この値が正しくなかったり、負の値であったりする可能性があります。ただし、メモリ マネージャ セクションの全体的な AWE Allocated 値は正しい値です。個々の NUMA ノードによって割り当てられたメモリを追跡するには、SQL Server: Buffer Node パフォーマンス オブジェクトを使用します (詳細については、SQL Server Books Online を参照してください)。
  • MultiPage Allocator : この値は、このノードで実行中のスレッドによって、マルチページ アロケータ経由で割り当てられたメモリを示します。このメモリは、バッファ プールの外部から割り当てられます。
  • SinglePage Allocator : この値は、このノードで実行中のスレッドによって、シングルページ アロケータ経由で割り当てられたメモリを示します。このメモリは、バッファ プールから使用されます。
: すべてのメモリ ノードに対する VM Reserved 値と VM Committed 値の合計は、メモリ マネージャ セクションでレポートされた対応する値よりわずかに少なくなります。

集計メモリ

次のセクションには、各 Clerk タイプおよび各 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 は、SQL Server を実行中のコンピュータの NUMA ノード構成と対応しています。ノード ID には、ハードウェア NUMA ノード上または SMP システム上で定義された使用可能なソフトウェア NUMA ノードが含まれます。各ノードのノード ID と CPU の対応を確認するには、イベント ID 17152 の情報を参照してください。このイベントは、SQL Server の起動時にイベント ビューアのアプリケーション ログに記録されます。

SMP システムの場合は、clerk タイプごとに 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 Reserved : この値は、メモリ マップ ファイル API を使用しているこの種類のすべてのクラークによって予約される VAS を示します。この API は "共有メモリ" とも呼ばれます。
  • SM Committed : この値は、メモリ マップ ファイル API を使用しているこの種類のすべてのクラークによってコミットされる VAS を示します。
sys.dm_os_memory_clerks 動的管理ビュー (DMV) を使用すると、すべてのメモリ ノードに対する Clerk タイプごとの概要情報を取得できます。この操作を行うには、次のクエリを実行します。
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 バッファの配分を示します。
   Buffer Distribution            Buffers   ------------------------------ -----------   Stolen                         553   Free                           103   Cached                         161   Database (clean)               1353   Database (dirty)               38   I/O                            0   Latched                        0   (7 row(s) affected)
このセクションの要素は次のとおりです。
  • Stolen : "Stolen (使用された) メモリ" とは、さまざまな目的でサーバーが使用する 8 KB バッファのことです。これらのバッファは、汎用的なメモリ ストア割り当てとして機能します。サーバーのさまざまなコンポーネントが、これらのバッファを使用して内部データ構造を格納します。lazywriter プロセスは、Stolen バッファをバッファ プールからフラッシュすることはできません。
  • Free : この値は、現在使用されていない、コミットされたバッファを示します。これらのバッファは、データ保持のために使用可能です。または、他のコンポーネントがこれらのバッファを要求し、これらのバッファを "Stolen" とマークする場合もあります。
  • Cached : この値は、さまざまなキャッシュ用に使用されるバッファを示します。
  • Database (clean) : この値は、データベース コンテンツを持ち、変更されていないバッファを示します。
  • Database (dirty) : この値は、データベース コンテンツを持ち、変更されているバッファを示します。これらのバッファには、ディスクにフラッシュする必要がある変更が含まれます。
  • I/O : この値は、保留中の I/O 処理で待機しているバッファを示します。
  • Latched : この値は "ラッチ済み" バッファを示します。バッファは、スレッドによるページのコンテンツの読み取り中または変更中にラッチされます。また、ページがディスクから読み取り中またはディスクへの書き込み中である場合もバッファはラッチされます。ラッチは、読み取り中または変更中のページ内のデータの物理的な整合性を維持するために使用されます。ロックは、論理的なトランザクションの整合性を維持するために使用されます。

バッファ プールの詳細

データベース ページ用のバッファ プールのバッファに関する詳細な情報を得るには、sys.dm_os_buffer_descriptors DMV を使用します。また、サーバーのさまざまな目的に使用されるバッファ プール ページに関する詳細な情報を得るには、sys.dm_os_memory_clerks DMV を使用します。

次のセクションは、バッファ プールの詳細および追加情報の一覧です。
   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 : この値は、"コミットされた" バッファの合計を示します。コミットされたバッファには、そのバッファと関連付けられた物理メモリがあります。Committed 値は、バッファ プールの現在のサイズです。この値には、AWE サポートが有効な場合に割り当てられる物理メモリが含まれます。
  • Target : この値は、バッファ プールのターゲット サイズを示します。Target 値が Committed 値より大きい場合、バッファ プールは増加中です。Target 値が Committed 値より小さい場合、バッファ プールは縮小中です。
  • Hashed : この値は、バッファ プールに格納されたデータ ページ数とインデックス ページ数を示します。
  • Stolen Potential : この値は、バッファ プールから使用できる最大ページ数を示します。
  • ExternalReservation : この値は、並べ替え操作またはハッシュ操作を実行するクエリ用に予約されているページ数を示します。これらのページはまだ使用されていません。
  • Min Free : この値は、バッファ プールがフリー リストで保持しようとしているページ数を示します。
  • Visible : この値は、同時に表示可能なバッファを示します。これらのバッファには同時に直接アクセスできます。この値は、通常、バッファの合計と等しくなります。ただし、AWE サポートが有効な場合は、この値はバッファの合計より小さくなることがあります。
  • Available Paging File : この値は、コミット可能なメモリ量を示します。この値は、8 KB バッファの数として表されます。詳細については、Windows API ドキュメントの「GlobalMemoryStatusEx 関数」を参照してください。

プロシージャ キャッシュ

次のセクションは、プロシージャ キャッシュの構成の説明です。
   Procedure Cache                Value   ------------------------------ -----------   TotalProcs                     4   TotalPages                     25   InUsePages                     0   (3 row(s) affected)
このセクションの要素は次のとおりです。
  • TotalProcs : この値は、現在プロシージャ キャッシュにあるキャッシュされたオブジェクトの合計を示します。この値は、sys.dm_exec_cached_plans DMV の項目と対応します。

    : この情報は動的であるため、正確には対応しない場合があります。トリガ、プロシージャなどのキャッシュされたオブジェクトの種類やアドホック オブジェクトの詳細については、PerfMon を使用して SQL Server: Plan Cache オブジェクトと sys.dm_exec_cached_plans DMV を監視してください。
  • 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 オブジェクトによって使用されるメモリを示します。Resource オブジェクトは、ストレージ エンジンおよびサーバー全体のさまざまな構造体によって使用されます。
  • Locks : この値は、ロック マネージャによって使用されるメモリを示します。
  • XDES : この値は、トランザクション マネージャによって使用されるメモリを示します。
  • SETLS : この値は、スレッド ローカル ストレージを使用する、ストレージ エンジン固有のスレッドごとの構造体を割り当てるために使用されるメモリを示します。
  • SE Dataset Allocators : この値は、"アクセス メソッド" 設定によってテーブル アクセス用の構造体を割り当てるために使用されるメモリを示します。
  • SubpDesc Allocators : この値は、クエリの並列実行、バックアップ操作、復元操作、データベース操作、ファイル操作、ミラーリング、および非同期カーソル用のサブプロセスを管理するために使用されるメモリを示します。これらのサブプロセスは、"並列プロセス" とも呼ばれます。
  • SE SchemaManager : この値は、ストレージ エンジン固有のメタデータを格納するためにスキーマ マネージャによって使用されるメモリを示します。
  • SQLCache : この値は、アドホック ステートメントおよび準備されたステートメントのテキストを格納するために使用されるメモリを示します。
  • Replication : この値は、内部レプリケーション サブシステム用にサーバーによって使用されるメモリを示します。
  • ServerGlobal : この値は、いくつかのサブシステムによって汎用的に使用されるグローバル サーバー メモリ オブジェクトを示します。
  • XP Global : この値は、拡張ストアド プロシージャによって使用されるメモリを示します。
  • Sort Tables : この値は、並べ替えテーブルによって使用されるメモリを示します。

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

次のセクションは、クエリ メモリの許可情報の説明です。ここには、クエリ メモリ使用量のスナップショットが含まれます。クエリ メモリは "ワークスペース メモリ" とも呼ばれます。
   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 : この値は、メモリが割り当てられた実行中のクエリを示します。
  • Waiting : この値は、メモリの割り当てを待っているクエリを示します。
  • Available : この値は、ハッシュと並べ替えのワークスペースとしてクエリで使用できるバッファを示します。Available 値は定期的に更新されます。
  • Maximum : この値は、すべてのクエリでワークスペースとして使用できるバッファの合計を示します。
  • Limit : この値は、大きいクエリ用のキューのクエリ実行対象を示します。この値が Maximum (Buffers) 値と異なるのは、Maximum (Buffers) 値はキュー内に変更があるまで更新されないためです。
  • Next Request : この値は、次の待機中クエリ用のメモリ要求のサイズ (バッファ数) を示します。
  • Waiting For : この値は、Next Request 値で参照されているクエリを実行するために使用可能であることが必要なメモリ量を示します。Waiting For 値は、Next Request 値に余裕係数を乗算したものです。この値によって、次の待機中クエリの実行時に特定のメモリ量を使用できることが事実上保証されます。
  • Cost : この値は、次の待機中クエリのコストを示します。
  • Timeout : この値は、次の待機中クエリのタイムアウト時間 (秒) を示します。
  • Wait Time : この値は、次の待機中クエリがキューに挿入されてからの経過時間 (ミリ秒) を示します。
  • Last Target : この値は、クエリ実行用のメモリ全体に対する制限を示します。この値は、大きいクエリ用のキューと小さいクエリ用のキュー両方の制限を合わせたものです。

最適化

次のセクションは、同時にクエリを最適化しようとするユーザーに関する概要です。
   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)
Memory status memorystatus SQL Server 2005 memory dbcc
プロパティ

文書番号:907877 - 最終更新日: 02/15/2011 20:43:00 - リビジョン: 1.3

  • kbsqlmanagementtools kbsql2005engine kbtshoot kbinfo KB907877
フィードバック