sys.dm_db_index_usage_stats (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
さまざまな種類のインデックス操作の数と、各種の操作が前回実行された時刻を返します。
Azure SQL Database では、動的管理ビューでは、データベースの包含に影響する情報を公開したり、ユーザーがアクセスできる他のデータベースに関する情報を公開したりすることはできません。 この情報が公開されないようにするために、接続されているテナントに属していないデータを含む行はすべてフィルタリングされます。
Note
DMV sys.dm_db_index_usage_stats
は、メモリ最適化インデックスまたは空間インデックスに関する情報を返しません。 メモリ最適化インデックスの使用については、「 sys.dm_db_xtp_index_stats (Transact-SQL)」を参照してください。
Note
Azure Synapse Analytics または Analytics Platform System (PDW) からこのビューを呼び出すには、 sys.dm_pdw_nodes_db_index_usage_stats
を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
列名 | データ型 | 説明 |
---|---|---|
database_id | smallint | テーブルまたはビューが定義されているデータベースの ID。 Azure SQL Database では、値は 1 つのデータベースまたは Elastic Pool 内で一意ですが、論理サーバー内では一意ではありません。 |
object_id | int | インデックスが定義されているテーブルまたはビューの ID。 |
index_id | int | インデックスの ID。 |
user_seeks | bigint | ユーザー クエリによるシークの数。 |
user_scans | bigint | "seek" 述語を使用しなかったユーザー クエリによるスキャンの数。 |
user_lookups | bigint | ユーザー クエリによるブックマーク参照の数。 |
user_updates | bigint | ユーザー クエリによる更新数。 これには、影響を受ける実際の行ではなく、実行された操作の数を表す挿入、削除、更新が含まれます。 たとえば、1 つのステートメントで 1000 行を削除すると、このカウントは 1 ずつインクリメントされます。 |
last_user_seek | datetime | 最後のユーザー シークの時刻 |
last_user_scan | datetime | 前回のユーザー スキャンの時刻。 |
last_user_lookup | datetime | 最後のユーザー参照の時刻。 |
last_user_update | datetime | ユーザーが最後に更新された時刻。 |
system_seeks | bigint | システム クエリによるシーク数。 |
system_scans | bigint | システム クエリごとのスキャンの数。 |
system_lookups | bigint | システム クエリごとの参照の数。 |
system_updates | bigint | システム クエリによる更新数。 |
last_system_seek | datetime | 最後のシステム シークの時刻。 |
last_system_scan | datetime | 前回のシステム スキャンの時刻。 |
last_system_lookup | datetime | 前回のシステム参照の時刻。 |
last_system_update | datetime | システムの最後の更新時刻。 |
pdw_node_id | int | 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW) このディストリビューションがオンになっているノードの識別子。 |
解説
指定したインデックスに対し、1 回のクエリ実行でシーク、スキャン、参照、または更新が行われるたび、その操作はインデックスの使用としてカウントされ、このビュー内の対応するカウンターが 1 増えます。 情報は、ユーザーが送信したクエリによる操作と、統計収集のスキャンなど内部生成されたクエリによる操作の両方についてレポートされます。
user_updates
列は、基になるテーブルまたはビューに対する挿入、更新、または削除操作によって発生するインデックスのメンテナンスカウンターです。 このビューを使用して、アプリケーションであまり使用されないインデックスを特定できます。 ビューを使用して、メンテナンスのオーバーヘッドが発生しているインデックスを特定することもできます。 メンテナンスのオーバーヘッドの原因になっており、クエリでほとんどまたはまったく使用されないインデックスが特定できれば、インデックスの削除を検討することもできます。
カウンターは、データベース エンジンが起動されるたびに空に初期化されます。 データベース エンジンが最後に起動された時刻を調べるには、sys.dm_os_sys_info の sqlserver_start_time
を使用します。 さらに、データベースがデタッチまたはシャットダウンされるたびに (たとえば、AUTO_CLOSEが ON に設定されているため)、データベースに関連付けられているすべての行が削除されます。
インデックスを使用すると、インデックスの行がまだ存在しない場合、 sys.dm_db_index_usage_stats
に行が追加されます。 行が追加されると、そのカウンターは最初に 0 に設定されます。
SQL Server 2008 R2 (10.50.x)、SQL Server 2012 (11.x)、または SQL Server 2014 (12.x) へのアップグレード中に、 sys.dm_db_index_usage_stats
のエントリは削除されます。 SQL Server 2016 (13.x) 以降では、エントリは SQL Server 2008 R2 (10.50.x) より前と同じように保持されます。
アクセス許可
SQL Server と SQL Managed Instance では、VIEW SERVER STATE
アクセス許可が必要です。
SQL Database Basic、S0、および S1 サービス目標、および弾性プール内のデータベースの場合サーバー管理者アカウント、Microsoft Entra 管理者アカウント、または##MS_ServerStateReader##
サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE
アクセス許可または ##MS_ServerStateReader##
サーバー ロールのメンバーシップのいずれかが必要です。
SQL Server 2022 以降でのアクセス許可
サーバーに対する VIEW SERVER PERFORMANCE STATE アクセス許可が必要です。
関連項目
インデックス関連の動的管理ビューと関数 (Transact-SQL)
sys.dm_db_index_physical_stats (Transact-SQL)
sys.dm_db_index_operational_stats (Transact-SQL)
sys.indexes (Transact-SQL)
sys.objects (Transact-SQL)
sys.dm_os_sys_info (Transact-SQL)
パフォーマンスの監視とチューニング