sys.dm_db_index_usage_stats (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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_infosqlserver_start_time を使用します。 さらに、データベースがデタッチまたはシャットダウンされるたびに (たとえば、AUTO_CLOStandard Editionが 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)
パフォーマンスの監視とチューニング