sys.dm_db_stats_properties (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

現在の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 です。 統計 ID は、 sys.stats 動的管理ビューから取得できます。 stats_idintです。

返されるテーブル

列名 データ型 説明
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 は行の列に返される値と同じです。
modification_counter bigint 統計情報が前回更新されてから先頭の統計列 (構築するヒストグラムの基になる列) に対して行われた変更の総数。

メモリ最適化テーブル: 2016 (13.x) SQL Server以降、Azure SQL Database では、この列には、前回統計が更新されたか、データベースが再起動されてからのテーブルの変更の合計数が含まれます。
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 です。 これは、述語が行を返さないフィルター選択された統計情報や、新しい空のテーブルの場合です。

アクセス許可

ユーザーが統計列に対する選択権限を持っているか、ユーザーがテーブルを所有しているか、固定サーバー ロール、固定データベース ロール、db_ownerまたは固定データベース ロールのsysadmindb_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. 頻繁に変更されるオブジェクトの統計プロパティを返す

次の例では、統計が前回更新されてからの先頭列の変更が 1,000 回を超える、現在のデータベース内にあるすべてのテーブル、インデックス付きビュー、および統計を返します。

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)