sys.dm_db_stats_properties (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例
返回当前 SQL Server 数据库中指定数据库对象(表或索引视图)的统计信息的属性。 有关已分区表,请参阅类似的 sys.dm_db_incremental_stats_properties。
语法
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 | 上次更新统计信息对象的日期和时间。 有关详细信息,请参阅此页中的备注部分。 |
行 | bigint | 上次更新统计信息时表或索引视图中的总行数。 如果筛选统计信息或者统计信息与筛选索引对应,该行数可能小于表中的行数。 |
rows_sampled | bigint | 用于统计信息计算的抽样总行数。 |
steps | int | 直方图中的梯级数。 有关详细信息,请参阅 DBCC SHOW_STATISTICS (Transact-SQL)。 |
unfiltered_rows | bigint | 应用筛选表达式(用于筛选的统计信息)之前表中的总行数。 如果未筛选统计信息,则 unfiltered_rows 等于行列中返回的值。 |
modification_counter | bigint | 自上次更新统计信息以来前导统计信息列(构建直方图的列)的总修改次数。 内存优化表:启动 SQL Server 2016(13.x),Azure SQL 数据库此列包含:自上次更新统计信息或重新启动数据库以来表的修改总数。 |
persisted_sample_percent | float | 持久样本百分比用于未显式指定采样百分比的统计信息更新。 如果值为零,则不为此统计信息设置持久样本百分比。 适用于:SQL Server 2016 (13.x) SP1 CU4 |
注解
sys.dm_db_stats_properties在以下任一条件下返回空行集:
- object_id或stats_id为 NULL。
- 指定的对象未找到或不对应于某个表或索引视图。
- 指定的统计信息 ID 不对应于指定对象 ID 的现有统计信息。
- 当前用户没有权限查看统计信息对象。
此行为允许在与视图(如 sys.objects 和 sys.stats)中的行相交时安全使用sys.dm_db_stats_properties。
统计信息更新日期连同直方图和密度矢量一起存储在统计信息 blob 对象中,而不是存储在元数据中。 如果未读取任何数据以生成统计信息数据,则不会创建统计信息 blob、日期不可用, 并且last_updated 列为 NULL。 针对谓词不返回任何行或新的空表,筛选的统计信息便是这种情况。
权限
要求用户对统计信息列拥有 select 权限,或用户拥有表,或用户是 sysadmin
固定服务器角色、db_owner
固定数据库角色或 db_ddladmin
固定数据库角色的成员。
示例
A. 简单示例
以下示例返回 AdventureWorks 数据库中表 Person.Person
的统计信息。
SELECT * FROM sys.dm_db_stats_properties (object_id('Person.Person'), 1);
B. 返回表的所有统计信息属性
以下示例返回表 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');
°C 返回频繁修改的对象的统计信息属性
以下示例返回自上次更新统计信息以来当前数据库中前导列修改次数超过 1000 的所有表、索引视图和统计信息。
SELECT obj.name, obj.object_id, stat.name, stat.stats_id, last_updated, modification_counter
FROM sys.objects AS obj
INNER JOIN sys.stats AS 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)
sys.stats (Transact-SQL)
与对象相关的动态管理视图和函数 (Transact-SQL)
动态管理视图和函数 (Transact-SQL)
sys.dm_db_incremental_stats_properties (Transact-SQL)
sys.dm_db_stats_histogram (Transact-SQL)