sys.dm_db_index_usage_stats (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
返回不同类型索引操作的计数以及上次执行每种操作的时间。
在 Azure SQL 数据库中,动态管理视图不能公开将影响数据库包含的信息,也不能公开有关用户可以访问的其他数据库的信息。 为了避免暴露此信息,包含不属于所连接租户的数据的每行都会被筛选出。
注意
DMV sys.dm_db_index_usage_stats
不返回有关内存优化索引或空间索引的信息。 有关内存优化索引使用的信息,请参阅sys.dm_db_xtp_index_stats(Transact-SQL)。
注意
若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此视图,请使用 sys.dm_pdw_nodes_db_index_usage_stats
。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。
列名称 | 数据类型 | 描述 |
---|---|---|
database_id | smallint | 在其中定义表或视图的数据库的 ID。 在 Azure SQL 数据库中,这些值在单一数据库或弹性池中是唯一的,但在逻辑服务器中不是唯一的。 |
object_id | int | 为其定义索引的表或视图的 ID。 |
index_id | int | 索引的 ID。 |
user_seeks | bigint | 通过用户查询执行的搜索次数。 |
user_scans | bigint | 未使用“seek”谓词的用户查询的扫描数。 |
user_lookups | bigint | 由用户查询执行的书签查找次数。 |
user_updates | bigint | 通过用户查询执行的更新次数。 这包括“插入”、“删除”和“更新”,表示未完成实际行的操作数。 例如,如果在一个语句中删除 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) 此分发所在节点的标识符。 |
注解
由一个查询执行对指定索引所进行的每个单独的搜索、扫描、查找或更新都被计为对该索引的一次使用,并使此视图中的相应计数器递增。 对于由用户提交的查询所引发的操作以及由内部生成的查询所引发的操作(例如为收集统计信息而进行的扫描),都将报告相应的信息。
该 user_updates
列是对索引进行维护的计数器,该计数器是由基础表或视图上的插入、更新或删除操作导致的。 可以使用此视图确定应用程序极少使用的索引。 还可以使用此视图确定引发维护开销的索引。 您可能要删除引发维护开销但不用于查询或只是偶尔用于查询的索引。
每当启动数据库引擎时,计数器将初始化为空。 使用 sys.dm_os_sys_info 中的 sqlserver_start_time
列查找上次数据库引擎启动时间。 而且,当分离或关闭数据库时(例如,由于 AUTO_CLOSE 设置为 ON),便会删除与该数据库关联的所有行。
使用索引时,如果索引尚不存在行,则会向 sys.dm_db_index_usage_stats
该行添加一行。 当添加该行时,它的计数器会初始设置为零。
在升级到 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 托管实例,需要 VIEW SERVER STATE
权限。
在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerStateReader##
服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 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)
监视和优化性能