分享方式:


sys.dm_db_stats_properties (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

傳回目前 SQL Server 資料庫中指定之資料庫物件(資料表或索引檢視表)的統計數據屬性。 如需數據分割數據表,請參閱類似的 sys.dm_db_incremental_stats_properties

語法

sys.dm_db_stats_properties (object_id, stats_id)  

引數

object_id
這是目前資料庫中,要求其中一個統計資料屬性之物件的識別碼。 @object_idint

stats_id
這是指定 object_id之統計資料的識別碼。 您可以從 sys.stats 動態管理檢視取得統計資料識別碼。 stats_idint

傳回的資料表

資料行名稱 資料類型 描述
object_id int 要傳回統計資料物件屬性之物件 (資料表或索引檢視表) 的識別碼。
stats_id int 統計資料物件的識別碼。 這在資料表或索引檢視表中是唯一的。 如需詳細資訊,請參閱 sys.stats (Transact-SQL)
last_updated datetime2 上次更新統計數據物件的日期和時間。 如需詳細資訊,請參閱此頁的備註一節。
rows bigint 上次更新統計數據時,數據表或索引檢視表中的數據列總數。 如果篩選了統計資料或是統計資料對應至篩選過的索引,此資料列數可能會少於資料表中的資料列數。
rows_sampled bigint 針對統計資料計算進行取樣的資料列總數。
步驟 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。
  • 找不到指定的物件,或未對應至數據表或索引檢視表。
  • 指定的統計數據識別碼不會對應至指定物件標識碼的現有統計數據。
  • 目前用戶沒有檢視統計數據對象的許可權。

當交叉套用至 sys.objectssys.stats檢視中的數據列時,此行為允許安全使用sys.dm_db_stats_properties

統計資料更新日期儲存在統計資料 Blob 物件中,其中還有長條圖密度向量,不是儲存在中繼資料中。 未讀取任何數據以產生統計數據數據時,不會建立統計數據 Blob、無法使用日期,且 last_updated 數據行為 NULL。 這是已篩選統計資料的情況,其中述詞未傳回任何資料列,或為新的空白資料表的情況。

權限

要求使用者對於統計資料資料行擁有選取權限,或是使用者擁有資料表,或使用者是 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)