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_idint

stats_id
指定 object_id 的统计信息 ID。 可以从 sys.stats 动态管理视图获取该统计信息 ID。 stats_idint

返回的表

列名称 数据类型 说明
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.objectssys.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)