sys.dm_db_stats_properties (Transact-SQL)
返回当前 SQL Server 数据库中指定数据库对象(表或索引视图)的统计信息属性。
注意 |
---|
动态管理对象 sys.dm_db_stats_properties 在 SQL Server 2012(从 Service Pack 1 开始)和 SQL Server 2008 R2(从 Service Pack 2 开始)已提供。 |
语法
sys.dm_db_stats_properties (object_id, stats_id)
参数
object_id
当前数据库中您要请求其某个统计信息属性的对象的 ID。 object_id 的数据类型为 int。stats_id
指定的 object_id 的统计信息 ID。 可以从 sys.stats 动态管理视图获取该统计信息 ID。 stats_id 的数据类型为 int。
返回的表
列名 |
数据类型 |
说明 |
---|---|---|
object_id |
int |
要返回统计信息对象属性的对象(表或索引视图)的 ID。 |
stats_id |
int |
统计信息对象的 ID。 在表或索引视图中是唯一的。 有关详细信息,请参阅 sys.stats (Transact-SQL)。 |
last_updated |
datetime2 |
上次更新统计信息对象的日期和时间。 |
rows |
bigint |
上次更新统计信息时表或索引视图中的总行数。 如果筛选统计信息或者统计信息与筛选索引对应,该行数可能小于表中的行数。 |
rows_sampled |
bigint |
用于统计信息计算的抽样总行数。 |
steps |
int |
直方图中的梯级数。 有关详细信息,请参阅 DBCC SHOW_STATISTICS (Transact-SQL)。 |
unfiltered_rows |
bigint |
应用筛选表达式(用于筛选的统计信息)之前表中的总行数。 如果未筛选统计信息,则 unfiltered_rows 等于 rows 列中返回的值。 |
modification_counter |
bigint |
自上次更新统计信息以来前导统计信息列(构建直方图的列)的总修改次数。 |
注释
在满足以下任意条件时,sys.dm_db_stats_properties 将返回空的行集:
object_id 或 stats_id 为 NULL。
指定的对象未找到或不对应于某个表或索引视图。
指定的统计信息 ID 不对应于指定对象 ID 的现有统计信息。
当前用户没有权限查看统计信息对象。
此行为旨在确保在对 sys.objects 和 sys.stats 等视图中的行交叉应用 sys.dm_db_stats_properties 时,不会造成安全问题。
权限
要求用户对统计信息列拥有 select 权限,或用户拥有表,或用户是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。
示例
A.返回表的所有统计信息属性
以下示例返回表 TEST 的所有统计信息属性。
SELECT
sp.stats_id, name, filter_definition, last_updated, rows, rows_sampled, steps, unfiltered_rows, modification_counter
FROM sys.stats AS stat
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE stat.object_id = object_id('TEST');
B.返回频繁修改的对象的统计信息属性
以下示例返回自上次更新统计信息以来当前数据库中前导列修改次数超过 1000 的所有表、索引视图和统计信息。
SELECT
obj.name, obj.object_id, stat.name, stat.stats_id, last_updated, modification_counter
FROM sys.objects AS obj
JOIN sys.stats stat ON stat.object_id = obj.object_id
CROSS APPLY sys.dm_db_stats_properties(stat.object_id, stat.stats_id) AS sp
WHERE modification_counter > 1000;
请参阅
参考
DBCC SHOW_STATISTICS (Transact-SQL)