適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric の SQL データベース
データベース内のテーブルまたはインデックスの各パーティションの下位レベルのデータ アクセス、ロック、ラッチの統計情報を返します。
Syntax
sys.dm_db_index_operational_stats (
{ database_id | NULL | 0 | DEFAULT }
, { object_id | NULL | 0 | DEFAULT }
, { index_id | 0 | NULL | -1 | DEFAULT }
, { partition_number | NULL | 0 | DEFAULT }
)
引数
{ database_id |NULL |0 | DEFAULT }
データベースの ID です。
database_id は smallint です。 有効な入力は、データベースのID番号、 NULL、 0、または DEFAULTです。 既定値は 0 です。
NULL、 0、および DEFAULT は、このコンテキストで同等の値です。
SQL Server のインスタンス内のすべてのデータベースの情報を返す NULL を指定します。
NULLにを指定する場合は、NULL、index_id、およびpartition_numberのも指定する必要があります。
組み込み関数 DB_ID を指定できます。
{ object_id |NULL |0 | DEFAULT }
インデックスがオンになっているテーブルまたはビューのオブジェクト ID。 object_id は int です。
有効な入力は、テーブルやビューのID番号、 NULL、 0、または DEFAULTです。 既定値は 0 です。
NULL、 0、および DEFAULT は、このコンテキストで同等の値です。
指定したデータベース内のすべてのテーブルとビューの情報を返す NULL を指定します。
NULLにを指定する場合は、NULLとpartition_numberのも指定する必要があります。
{ index_id | 0 |NULL |-1 | DEFAULT }
インデックスの ID。
index_id知性です。有効な入力はインデックスのID番号であり0、object_idがヒープ、NULL、-1、DEFAULTのいずれかです。 既定値は -1 です。
NULL、 -1、および DEFAULT は、このコンテキストで同等の値です。
ベース テーブルまたはビューのすべてのインデックスの情報を返す NULL を指定します。
NULLにを指定する場合は、NULLのも指定する必要があります。
{ partition_number |NULL |0 | DEFAULT }
オブジェクト内のパーティション番号を指定します。 0 です。
NULL、 0、および DEFAULT は、このコンテキストで同等の値です。
インデックスまたはヒープのすべてのパーティションに関する情報を返す NULL を指定します。
partition_number は 1 から始まります。 パーティション分割されていないインデックスまたはヒープ partition_number 1 に設定されています。
返されるテーブル
| 列名 | データの種類 | Description |
|---|---|---|
database_id |
smallint | データベース ID。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
object_id |
int | テーブルまたはビューの ID。 詳細は sys.objectsをご覧ください。 |
index_id |
int | インデックスまたはヒープの ID。 詳細は sys.indexesをご覧ください。 |
partition_number |
int | インデックスまたはヒープ内の、1 から始まるパーティション番号。 詳細は sys.partitionsをご覧ください。 |
hobt_id |
bigint | 列ストア インデックスの内部データを追跡するデータ ヒープまたは B ツリー行セットの ID。NULL - これは内部のColumnstore行セットではありません。詳細については、「 sys.internal_partitions」を参照してください。 |
leaf_insert_count |
bigint | リーフ レベルの挿入の累積数。 インデックス レベルの詳細については、「 インデックスのアーキテクチャと設計ガイド」を参照してください。 |
leaf_delete_count |
bigint | リーフ レベルの削除の累積カウント。
leaf_delete_count 削除されたレコードがゴーストとしてマークされていない場合にのみ増加します。 最初にゴースト化された削除済みレコードの場合、代わりに leaf_ghost_count がインクリメントされます。 |
leaf_update_count |
bigint | リーフ レベルの更新の累積カウント。 |
leaf_ghost_count |
bigint | 削除済みとしてマークされているが、まだ削除されていないリーフ レベルの行の累積数。 このカウントには、ゴーストとしてマークされずに即座に削除されるレコードは含まれていません。 クリーンアップ スレッドは、設定された間隔でゴースト行を削除します。 この値は、未処理のスナップショットトランザクションのために保持されるゴースト行は含まれていません。 |
nonleaf_insert_count |
bigint | リーフ レベルより上の挿入の累積数。 B ツリー インデックスにのみ適用されます。 ヒープまたは列ストア インデックスの場合は 0。 |
nonleaf_delete_count |
bigint | リーフ レベルより上の削除の累積数。 B ツリー インデックスにのみ適用されます。 ヒープまたは列ストア インデックスの場合は 0。 |
nonleaf_update_count |
bigint | リーフ レベルより上の更新の累積数。 B ツリー インデックスにのみ適用されます。 ヒープまたは列ストア インデックスの場合は 0。 |
leaf_allocation_count |
bigint | インデックスまたはヒープ内のリーフ レベル のページ割り当ての累積カウント。 インデックスの場合、ページ割り当てとページ分割は対応しています。 |
nonleaf_allocation_count |
bigint | リーフ レベルを超えるページ分割によって発生するページ割り当ての累積カウント。 B ツリー インデックスにのみ適用されます。 ヒープまたは列ストア インデックスの場合は 0。 |
leaf_page_merge_count |
bigint | リーフ レベルでのページマージの累積カウント。 列ストア インデックスの場合は常に 0。 |
nonleaf_page_merge_count |
bigint | リーフ レベルを超えるページ マージの累積カウント。 B ツリー インデックスにのみ適用されます。 ヒープまたは列ストア インデックスの場合は 0。 |
range_scan_count |
bigint | インデックスまたはヒープで開始された範囲スキャンとテーブル スキャンの累積カウント。 |
singleton_lookup_count |
bigint | インデックスまたはヒープからの 1 行の取得の累積カウント。 |
forwarded_fetch_count |
bigint | 前方向レコードを介してフェッチされた行の数。 ヒープにのみ適用されます。B ツリー インデックスの場合は 0 です。 |
lob_fetch_in_pages |
bigint |
LOB_DATAアロケーション ユニットから取得されたラージ オブジェクト (LOB) ページの累積カウント。 これらのページには、テキスト、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、jsonの各カラムに格納されたデータが含まれています。 詳細については、データ型を参照してください。 |
lob_fetch_in_bytes |
bigint | 取得された LOB データ バイトの累積カウント。 |
lob_orphan_create_count |
bigint | 一括操作用に作成された、孤立した LOB 値の累積数。 ヒープと B ツリークラスター化インデックスにのみ適用され、非クラスター化インデックスと列ストア インデックスの場合は 0 です。 |
lob_orphan_insert_count |
bigint | 一括操作中に挿入された孤立 LOB 値の累積カウント。 ヒープと B ツリークラスター化インデックスにのみ適用され、非クラスター化インデックスと列ストア インデックスの場合は 0 です。 |
row_overflow_fetch_in_pages |
bigint |
ROW_OVERFLOW_DATAアロケーション ユニットから取得された行オーバーフロー データ ページの累積カウント。これらのページには、 varchar(n)のnvarchar(n)、varbinary(n)、sql_variant、およびの列に格納されているデータが含まれています。 |
row_overflow_fetch_in_bytes |
bigint | 取得された行オーバーフロー データ バイトの累積カウント。 |
column_value_push_off_row_count |
bigint | 挿入または更新された行をページ内に収めるため、行外に出された LOB データおよび行オーバーフロー データに対する列値の累積数。 |
column_value_pull_in_row_count |
bigint | 行内でプルされる LOB データと行オーバーフロー データの列値の累積カウント。 これは、更新操作によってレコード内の領域が解放され、 LOB_DATA または ROW_OVERFLOW_DATA の割り当て単位から 1 つ以上の行外の値を IN_ROW_DATA 割り当て単位に取り込む機会が提供される場合に発生します。 |
row_lock_count |
bigint | 要求された行ロックの累積数。 |
row_lock_wait_count |
bigint | データベース エンジンが行ロックを待機した累積回数。 |
row_lock_wait_in_ms |
bigint | データベース エンジンが行ロックで待機した合計時間 (ミリ秒)。 |
page_lock_count |
bigint | 要求されたページ ロックの累積数。 |
page_lock_wait_count |
bigint | データベース エンジンがページ ロックを待機した累積回数。 |
page_lock_wait_in_ms |
bigint | データベース エンジンがページ ロックで待機した合計ミリ秒数。 |
index_lock_promotion_attempt_count |
bigint | データベース エンジンがロックをエスカレートしようとした累積回数。 |
index_lock_promotion_count |
bigint | データベース エンジンがロックをエスカレートした累積回数。 |
page_latch_wait_count |
bigint | データベース エンジンがラッチの取得を待機した累積回数。 |
page_latch_wait_in_ms |
bigint | データベース エンジンがラッチの取得を待機した累積時間 (ミリ秒)。 |
page_io_latch_wait_count |
bigint | データベース エンジンがページ I/O ラッチで待機した累積回数。 |
page_io_latch_wait_in_ms |
bigint | ページ I/O ラッチでデータベース エンジンが待機した累積ミリ秒数。 |
tree_page_latch_wait_count |
bigint | 上位レベルの B ツリー ページのみを含む page_latch_wait_count のサブセット。 ヒープまたは列ストア インデックスの場合は常に 0。 |
tree_page_latch_wait_in_ms |
bigint | 上位レベルの B ツリー ページのみを含む page_latch_wait_in_ms のサブセット。 ヒープまたは列ストア インデックスの場合は常に 0。 |
tree_page_io_latch_wait_count |
bigint | 上位レベルの B ツリー ページのみを含む page_io_latch_wait_count のサブセット。 ヒープまたは列ストア インデックスの場合は常に 0。 |
tree_page_io_latch_wait_in_ms |
bigint | 上位レベルの B ツリー ページのみを含む page_io_latch_wait_in_ms のサブセット。 ヒープまたは列ストア インデックスの場合は常に 0。 |
page_compression_attempt_count |
bigint | テーブル、インデックス、またはインデックスビューの特定のパーティションに対して PAGE レベル圧縮のために評価されたページ数。 大幅な節約ができなかったため圧縮されていないページも含まれます。 列ストア インデックスの場合は常に 0。 |
page_compression_success_count |
bigint | テーブル、インデックス、またはインデックスビューの特定のパーティションに対して PAGE 圧縮によって圧縮されたデータページ数。 列ストア インデックスの場合は常に 0。 |
version_generated_inrow |
bigint | 更新、マージ、またはゴースト挿入操作のヒープまたは B ツリーで生成されたペイロードを含む行内バージョンの累積カウント。 行内バージョンでは、古い行イメージ (または差分) が行に直接格納されるため、バージョン ストアへの移動は回避されます。 この数は、 insert_over_ghost_version_inrowによってカウントされるバージョンを含むスーパーセットです。 行内バージョンと行外バージョンの詳細については、「 永続バージョン ストア (PVS) で使用される領域」を参照してください。 |
version_generated_offrow |
bigint | ヒープ、B ツリー、または LOB の削除、更新、マージ、またはゴーストの挿入操作について、行外ストレージにプッシュされたバージョンの累積数。 古い行画像をインラインに保持できない場合、オフローバージョンが生成されます。 このカウントは、 ghost_version_offrow および insert_over_ghost_version_offrowによってカウントされるバージョンを含むスーパーセットです。 |
ghost_version_inrow |
bigint | 削除または更新 (削除後に挿入として実行) が、行内のバージョン情報を持つゴーストとして既存の行をマークした累積回数。 行内バージョンにはトランザクション タイムスタンプと長さ 0 のペイロードのみが格納されるため、削除を元に戻すには行のホストを解除するだけで済みます。 |
ghost_version_offrow |
bigint | 削除または更新 (削除の後に挿入として実行) によって既存の行または LOB 列データが行外ストレージにプッシュされ、行にスタブが残ってバージョン管理情報が残された累積回数。 このカウンターは、ゴースト操作中に version_generated_offrow と共にインクリメントされます。 |
insert_over_ghost_version_inrow |
bigint | B ツリーの過剰ゴースト挿入操作に対して生成されたペイロードを含む行内バージョンの累積カウント。 insert-over-ghost は、明示的な削除の後に挿入が続くか、削除として実装された更新またはマージから挿入された後に、以前にゴースト化されたレコードのスロットに新しい行が挿入されるときに発生します。 このカウンターは、 version_generated_inrowのサブセットです。 |
insert_over_ghost_version_offrow |
bigint | B ツリーの過剰なゴースト挿入操作中に既存のゴースト行がオフ行ストレージにプッシュされ、新しく挿入された行にバージョン情報用のスタブが残された累積回数。 このカウンターは、 version_generated_offrowのサブセットです。 |
compaction_attempt_count |
bigint | 指数自己コンパクト化の試み回数の累積数。 詳細は 「自動インデックス圧縮(プレビュー)」を参照してください。 |
compaction_complete_count |
bigint | 完成したインデックス自己計算の累積数。 |
compaction_skip_count |
bigint | スキップされたインデックス自動合成の累積カウント。 スキップの理由については、「 圧縮統計を監視するための拡張イベントの使用」を参照してください。 |
compaction_ineligible_count |
bigint | 圧縮試行数の累積は、自動圧縮の対象外のページが発生したためスキップされました。 |
compaction_failure_count |
bigint | 失敗した圧縮失敗の累積数。 |
compaction_row_move_count |
bigint | 累積行数は自動コンパクト化の一環としてページからページへ移動します。 |
compaction_page_deallocation_count |
bigint | すべての行を別のページに移動した後に割り当てられた累積ページ数。 |
Note
ドキュメントでは、一般的にインデックスに関して B ツリーという用語が使用されます。 行ストア インデックスで、データベース エンジンによって B+ ツリーが実装されます。 これは、列ストア インデックスやメモリ最適化テーブルのインデックスには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。
注釈
この関数は、メモリ最適化テーブルのインデックスに関する情報を返しません。 メモリ最適化テーブルのインデックスに関する情報は 、sys.dm_db_xtp_index_statsを参照してください。
この関数は、 CROSS APPLY および OUTER APPLYからの相関パラメーターを受け取りません。
sys.dm_db_index_operational_statsを使用して、データの読み取りと書き込みの操作の統計情報、およびテーブル、インデックス、またはパーティションのロック、ページ ラッチ、ページ I/O ラッチの統計情報を追跡できます。 重大なアクティビティまたは競合が発生しているテーブル、インデックス、およびパーティションを特定できます。
統計はパーティション レベルで提供され、加法です。 つまり、T-SQL で集計クエリを記述することで、インデックス レベルまたはテーブル レベルの統計を取得できます。 詳細については、 すべてのテーブルのインデックス スキャンとシークの例を 参照してください。
テーブル、インデックス、またはパーティションの読み取りおよび書き込み操作の統計情報を分析するには、次の列を使用します。
leaf_insert_countleaf_delete_countleaf_update_countleaf_ghost_countrange_scan_countsingleton_lookup_count
ラッチの競合を特定するには、次の列を使用します。
page_latch_wait_countpage_latch_wait_in_ms
ロックの競合を特定するには、次の列を使用します。
row_lock_countpage_lock_countrow_lock_wait_in_mspage_lock_wait_in_ms
物理 I/O 統計を分析するには、次の列を使用します。
page_io_latch_wait_countpage_io_latch_wait_in_ms
列の注釈
列 lob_fetch_in_pages および lob_fetch_in_bytes の値は、含まれる列として 1 つ以上の LOB 列を含む非クラスター化インデックスの場合、0 より大きい値にすることができます。 詳細については、「 含まれる列を含むインデックスを作成する」を参照してください。 同様に、非クラスター化インデックスにrow_overflow_fetch_in_pagesが含まれている場合、row_overflow_fetch_in_bytes列と列の値は 0 より大きくなる可能性があります。
メタデータ キャッシュ内のカウンターのリセット方法
sys.dm_db_index_operational_statsによって返されるデータは、ヒープまたは B ツリーを表すメタデータ キャッシュ オブジェクトが使用可能な限り存在します。 このデータは永続的ではありません。 つまり、これらのカウンターを使ってインデックスが使われたかどうかや、最後に使われた時期を決定的に判断することはできません。 代わりに sys.dm_db_index_usage_statsを使いましょう。
ヒープまたは B ツリーのメタデータがメタデータ キャッシュに取り込まれるたびに、各数値列の値は 0 に設定されます。 統計は、キャッシュ オブジェクトがメタデータ キャッシュから削除されるまで累積されます。 アクティブなヒープまたは B ツリーには、通常、そのメタデータがキャッシュに含まれ、累積カウントには、データベース エンジン インスタンスが最後に開始されてからのアクティビティが反映されます。 あまり活発でないヒープやBツリーのメタデータは、特にデータベース エンジンインスタンスがメモリ負荷を受けている場合、使用中にキャッシュに出入りすることがあります。 その結果、インデックス操作の統計情報が sys.dm_db_index_operational_statsに反映されないことがあります。 これは一般的ではありません。
統計はキャッシュから削除され、テーブルまたはインデックスが削除された場合、またはパーティションが切り捨てられた場合、この関数によって報告されなくなります。 インデックスに対する他の DDL 操作により、統計の値が 0 にリセットされる可能性があります。
システム関数を使用してパラメーター値を指定する
Transact-SQL 関数の DB_ID と OBJECT_ID を使用して、 database_id パラメーターと object_id パラメーターの値を指定できます。 しかし、これらの関数に無効な値を渡すと、意図しない結果が起こる可能性があります。
DB_IDまたはOBJECT_IDを使用する場合は、必ず有効な ID が返されることを確認してください。 詳細については、「 指定したテーブルの情報を返す」を参照してください。
Permissions
次のアクセス許可が必要です。
CONTROLデータベース内の指定されたオブジェクトに対するアクセス許可VIEW DATABASE STATEまたは、指定されたデータベース内のすべてのオブジェクトに関する情報を返す権限VIEW DATABASE PERFORMANCE STATE、@object_idの値が指定されていない場合に。VIEW SERVER STATEまた、@database_idの価値が指定されていない場合、すべてのデータベースに関する情報を返す権限VIEW SERVER PERFORMANCE STATE。
VIEW DATABASE STATEまたはVIEW SERVER PERFORMANCE STATEを付与すると、特定のオブジェクトに対して拒否されたCONTROL権限に関係なく、データベース内のすべてのオブジェクトを返すことができます。
VIEW DATABASE STATEまたはVIEW SERVER PERFORMANCE STATEを拒否すると、特定のオブジェクトに対して付与されたCONTROL権限に関係なく、データベース内のすべてのオブジェクトが返されなくなります。
詳細については、 システム動的管理のビューおよび機能をご覧ください。
Examples
指定したテーブルの情報を返します
以下の例は、AdventureWorks2025データベース内のすべての Person.Address テーブルのインデックスおよびパーティションの情報を返します。
Important
パラメータ値を返す際に Transact-SQL 関数 DB_ID と OBJECT_ID を使う際は、必ず有効なIDが返されることを確認しましょう。 データベース名またはオブジェクト名が見つからない場合 (存在しない場合やスペルが正しくない場合など)、両方の関数は NULLを返します。
sys.dm_db_index_operational_stats関数は、すべてのデータベースまたはすべてのオブジェクトを指定するワイルドカード値としてNULLを解釈します。 これは、意図しない操作である可能性があるため、このセクションの例では、データベースおよびオブジェクト ID を確認する安全な方法を示します。
DECLARE @db_id AS INT = DB_ID(N'AdventureWorks2025');
DECLARE @object_id AS INT = OBJECT_ID(N'AdventureWorks2025.Person.Address');
SELECT *
FROM sys.dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL)
WHERE @db_id IS NOT NULL
AND @object_id IS NOT NULL;
すべてのテーブルとインデックスの情報を返します
次の例では、データベース エンジン インスタンスのすべてのテーブルとインデックスの情報を返します。
SELECT *
FROM sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL);
すべてのテーブルのインデックス スキャンとシーク
次の例では、パーティション レベルのデータを集計して、現在のデータベース内のすべてのテーブルのインデックス シークとスキャンの統計を返します。
SELECT OBJECT_SCHEMA_NAME(object_id) AS schema_name,
OBJECT_NAME(object_id) AS object_name,
COUNT(DISTINCT(index_id)) AS index_count,
COUNT(DISTINCT(partition_number)) AS partition_count,
SUM(range_scan_count) AS index_scan_count,
SUM(singleton_lookup_count) AS index_seek_count
FROM sys.dm_db_index_operational_stats(DB_ID(), DEFAULT, DEFAULT, DEFAULT)
GROUP BY OBJECT_SCHEMA_NAME(object_id),
OBJECT_NAME(object_id)
ORDER BY schema_name, object_name;
関連するコンテンツ
- システム動的管理のビューと機能
- インデックス関連の動的管理ビューと関数 (Transact-SQL)
- パフォーマンスの監視とチューニング
- sys.dm_db_index_physical_stats(Transact-SQL)
- sys.dm_db_index_usage_stats(Transact-SQL)
- sys.dm_os_latch_stats(Transact-SQL)
- sys.dm_db_partition_stats(Transact-SQL)
- sys.allocation_units(Transact-SQL)
- sys.partitions (Transact-SQL)
- sys.indexes(Transact-SQL)