sys.dm_db_stats_properties (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure 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 統計情報が前回更新されてから先頭の統計列 (構築するヒストグラムの基になる列) に対して行われた変更の総数。

メモリ最適化テーブル: SQL Server 2016 (13.x) 以降と 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 です。 これは、述語が行を返さないフィルター選択された統計情報や、新しい空のテーブルの場合です。

アクセス許可

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

次の例では、統計が前回更新されてからの先頭列の変更が 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)