sys.dm_db_partition_stats (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

現在のデータベースのパーティションごとに、ページ数と行数の情報を返します。

Note

これを Azure Synapse Analytics または Analytics Platform System (PDW) から呼び出すには、 sys.dm_pdw_nodes_db_partition_statsという名前を使用します。 sys.dm_pdw_nodes_db_partition_statsのpartition_idは、Azure Synapse Analytics のsys.partitions カタログ ビューのpartition_idとは異なります。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

列名 データ型 説明
partition_id bigint パーティションの ID。 データベース内で一意です。 これは、Azure Synapse Analytics を除き、sys.partitions カタログ ビューのpartition_idと同じ値です。
object_id int パーティションが属するテーブルまたはインデックス付きビューのオブジェクト ID。
index_id int パーティションが属するヒープまたはインデックスの ID。

0 = ヒープ
1 = クラスター化インデックス
> 1 = 非クラスター化インデックス
partition_number int インデックスまたはヒープ内の、1 から始まるパーティション番号。
in_row_data_page_count bigint パーティションで行内データの格納に使用されているページ数。 パーティションがヒープに属している場合、値はヒープのデータ ページ数になります。 パーティションがインデックスに属している場合、値はリーフ レベルのページ数になります。 (B+ ツリーの非リーフ ページはカウントに含まれません。) IAM (Index Allocation Map) ページはどちらのケースでも含まれません。 xVelocity メモリ最適化列ストア インデックスでは、常に 0 です。
in_row_used_page_count bigint パーティションで行内データの格納と管理に使用されているページの合計数。 この数には、非リーフ B+ ツリー ページ、IAM ページ、および in_row_data_page_count 列内にあるすべてのページが含まれます。 列ストア インデックスでは、常に 0 です。
in_row_reserved_page_count bigint パーティションで行内データの格納と管理に予約されているページの合計数。ページが使用されているかどうかは考慮されません。 列ストア インデックスでは、常に 0 です。
lob_used_page_count bigint パーティションで行外の textntextimagevarchar(max)nvarchar(max)varbinary(max)xml 型列の格納と管理に使用されているページ数。 IAM ページは含まれます。

パーティションで列ストア インデックスの格納と管理に使用されている LOB の合計数。
lob_reserved_page_count bigint パーティションで行外の textntextimagevarchar(max)nvarchar(max)varbinary(max)xml 型列の格納と管理に予約されているページの合計数。ページが使用されているかどうかは考慮されません。 IAM ページは含まれます。

パーティションで列ストア インデックスの格納と管理のために予約されている LOB の合計数。
row_overflow_used_page_count bigint パーティションで行オーバーフローの varcharnvarcharvarbinarysql_variant 型列の格納と管理に使用されているページ数。 IAM ページは含まれます。

列ストア インデックスでは、常に 0 です。
row_overflow_reserved_page_count bigint パーティションで行オーバーフローの varcharnvarcharvarbinarysql_variant 型列の格納と管理に予約されているページの合計数。ページが使用されているかどうかは考慮されません。 IAM ページは含まれます。

列ストア インデックスでは、常に 0 です。
used_page_count bigint パーティションで使用されているページの合計数。 in_row_used_page_count + lob_used_page_count + row_overflow_used_page_count として計算されます。
reserved_page_count bigint パーティションで予約されているページの合計数。 in_row_reserved_page_count + lob_reserved_page_count + row_overflow_reserved_page_count として計算されます。
row_count bigint パーティション内の行数の概算値です。
pdw_node_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

このディストリビューションがオンになっているノードの識別子。
distribution_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

分布に関連付けられている一意の数値 ID。

解説

sys.dm_db_partition_stats動的管理ビュー (DMV) には、行内データ LOB データの格納と管理に使用される領域と、データベース内のすべてのパーティションの行オーバーフロー データに関する情報が表示されます。 ここではパーティションごとに 1 行が表示されます。

出力の基になっているカウントは、メモリにキャッシュされるか、さまざまなシステム テーブルのディスクに格納されます。

行内データ、LOB データ、行オーバーフロー データは、パーティションを構成する 3 つのアロケーション ユニットです。 sys.allocation_units カタログ ビューに対して、データベースの各アロケーション ユニットに関するメタデータを取得するクエリを実行できます。

パーティション分割されていないヒープまたはインデックスは、1 つのパーティション (パーティション番号 = 1) で構成されています。したがって、このようなヒープまたはインデックスの場合は 1 行だけが返されます。 sys.partitions カタログ ビューに対して、データベースのすべてのテーブルとインデックスの、各パーティションに関するメタデータを取得するクエリを実行できます。

各テーブルまたはインデックスの合計数は、関連するすべてのパーティションにおける数を加算することで取得されます。

アクセス許可

sys.dm_db_partition_stats動的管理ビューに対してクエリを実行するには、VIEW DATABASE STATEVIEW DEFINITIONのアクセス許可が必要です。 動的管理ビューの権限について詳しくは、動的管理ビューと関数 (Transact-SQL) に関する記事を参照してください。

SQL Server 2022 以降でのアクセス許可

データベースに対する VIEW DATABASE PERFORMANCE STATE および VIEW SECURITY DEFINITION のアクセス許可が必要です。

A. データベース内のすべてのインデックスとヒープのすべてのパーティションのすべてのカウントを返します

次の例では、AdventureWorks2022 データベースにあるすべてのインデックスとヒープに関するすべてのパーティションについて、ページ数や行数を表示します。

USE AdventureWorks2022;  
GO  
SELECT * FROM sys.dm_db_partition_stats;  
GO  

B. テーブルとそのインデックスのすべてのパーティションのすべてのカウントを返します

次の例では、HumanResources.Employee テーブルとテーブルのインデックスに関するすべてのパーティションについて、ページ数や行数を表示します。

USE AdventureWorks2022;  
GO  
SELECT * FROM sys.dm_db_partition_stats   
WHERE object_id = OBJECT_ID('HumanResources.Employee');  
GO  

C: ヒープまたはクラスター化インデックスの合計使用ページ数と合計行数を返します

次の例では、HumanResources.Employee テーブルのヒープまたはクラスター化インデックスについて、合計使用ページ数と合計行数を返します。 Employee テーブルは既定ではパーティション分割されていないため、合計値には 1 つのパーティションだけが含まれます。

USE AdventureWorks2022;  
GO  
SELECT SUM(used_page_count) AS total_number_of_used_pages,   
    SUM (row_count) AS total_number_of_rows   
FROM sys.dm_db_partition_stats  
WHERE object_id=OBJECT_ID('HumanResources.Employee')    AND (index_id=0 or index_id=1);  
GO