sys.dm_db_partition_stats (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL エンドポイントMicrosoft Fabric のウェアハウス

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

注意

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 では、データベースにあるすべてのパーティションの行内データ、LOB データ、行オーバーフロー データについて、格納と管理に使用されている領域に関する情報が表示されます。 ここではパーティションごとに 1 行が表示されます。

出力の基になる数字は、メモリにキャッシュされるか、各種システム テーブルのディスクに格納されます。

行内データ、LOB データ、行オーバーフロー データは、パーティションを構成する 3 つのアロケーション ユニットです。 [sys.allocation_units](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/sys-allocation-units-transact-sql?view=sql-server-ver15) カタログ ビューに対して、データベースの各アロケーション ユニットに関するメタデータを取得するクエリを実行できます。

パーティション分割されていないヒープまたはインデックスは、1 つのパーティション (パーティション番号 = 1) で構成されています。したがって、このようなヒープまたはインデックスの場合は 1 行だけが返されます。 [sys.partitions](https://docs.microsoft.com/sql/relational-databases/system-catalog-views/sys-partitions-transact-sql?view=sql-server-ver15) カタログ ビューに対して、データベースのすべてのテーブルとインデックスの、各パーティションに関するメタデータを取得するクエリを実行できます。

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

アクセス許可

sys.dm_db_partition_stats 動的管理ビューに対してクエリを実行するには、VIEW DATABASE STATE および VIEW 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  

参照

動的管理ビューと動的管理関数 (Transact-SQL)
データベース関連の動的管理ビュー (Transact-SQL)