sys.dm_db_column_store_row_group_physical_stats (Transact-sql)sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

適用対象:Applies to: はいSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) 以降 はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance適用対象:Applies to: はいSQL Server 2016 (13.x)SQL Server 2016 (13.x)yesSQL Server 2016 (13.x)SQL Server 2016 (13.x) and later はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance

現在のデータベース内のすべての列ストアインデックスについて、現在の行グループレベルの情報を提供します。Provides current rowgroup-level information about all of the columnstore indexes in the current database.

これに より、transact-sql)(sys.column_store_row_groups カタログビューが拡張されます。This extends the catalog view sys.column_store_row_groups (Transact-SQL).

列名Column name データ型Data type 説明Description
object_idobject_id intint 基になるテーブルの ID。ID of the underlying table.
index_idindex_id intint Object_id テーブルのこの列ストアインデックスの ID。ID of this columnstore index on object_id table.
partition_numberpartition_number intint Row_group_id を保持するテーブルパーティションの ID。ID of the table partition that holds row_group_id. Partition_number を使用して、この DMV を sys パーティションに参加させることができます。You can use partition_number to join this DMV to sys.partitions.
row_group_idrow_group_id intint この行グループの ID。ID of this row group. パーティションテーブルの場合、値はパーティション内で一意です。For partitioned tables, value is unique within the partition.

インメモリテールの場合は-1。-1 for an in-memory tail.
delta_store_hobt_iddelta_store_hobt_id bigintbigint デルタストアの行グループの hobt_id。The hobt_id for a row group in the delta store.

行グループがデルタストアに存在しない場合は NULL になります。NULL if row group is not in the delta store.

メモリ内のテーブルの末尾の場合は NULL です。NULL for tail of an in-memory table.
statestate tinyinttinyint State_description に関連付けられた ID 番号。ID number associated state_description.

0 = 非表示0 = INVISIBLE

1 = OPEN 1 = OPEN

2 = CLOSED 2 = CLOSED

3 = 圧縮3 = COMPRESSED

4 = 廃棄標識4 = TOMBSTONE

圧縮は、インメモリテーブルに適用される唯一の状態です。COMPRESSED is the only state that applies to in-memory tables.
state_descstate_desc nvarchar(60)nvarchar(60) 行グループの状態の説明:Description of the row group state:

0-非表示-ビルドされている行グループ。0 - INVISIBLE -A row group that is being built. 次に例を示します。For example:
列ストアの行グループは、データの圧縮中は非表示になります。A row group in the columnstore is INVISIBLE while the data is being compressed. 圧縮が完了すると、メタデータスイッチは列ストアの行グループの状態を "非表示" から "圧縮済み" に変更し、デルタストアの行グループの状態を "終了" から "廃棄済み" に変更します。When the compression is finished a metadata switch changes the state of the columnstore row group from INVISIBLE to COMPRESSED, and the state of the deltastore row group from CLOSED to TOMBSTONE.

1-OPEN-新しい行を受け入れる、デルタストアの行グループ。1 - OPEN - A deltastore row group that is accepting new rows. 開いている行グループは、行ストア形式のままであり、列ストア形式に圧縮されていません。An open row group is still in rowstore format and has not been compressed to columnstore format.

2-CLOSED-最大行数を含むデルタストア内の行グループ。これは、組ムーバープロセスによって列ストアに圧縮されるのを待機しています。2 - CLOSED - A row group in the delta store that contains the maximum number of rows, and is waiting for the tuple mover process to compress it into the columnstore.

3-圧縮-列ストア圧縮で圧縮され、列ストアに格納される行グループ。3 - COMPRESSED - A row group that is compressed with columnstore compression and stored in the columnstore.

4-TOMBSTONE-以前はデルタストア内にあった行グループは使用されなくなりました。4 - TOMBSTONE - A row group that was formerly in the deltastore and is no longer used.
total_rowstotal_rows bigintbigint 行グループに物理的に格納されている行の数。Number of rows physically stored in the row group. 圧縮された行グループの場合。For compressed row groups. 削除済みとしてマークされている行が含まれます。Includes the rows that are marked deleted.
deleted_rowsdeleted_rows bigintbigint 削除対象としてマークされている圧縮行グループに物理的に格納されている行の数。Number of rows physically stored in a compressed row group that are marked for deletion.

デルタ ストア内の行グループの場合は 0 です。0 for row groups that are in the delta store.
size_in_bytessize_in_bytes bigintbigint この行グループ内のすべてのページの合計サイズ (バイト単位)。Combined size, in bytes, of all the pages in this row group. このサイズには、メタデータまたは共有辞書を格納するために必要なサイズは含まれていません。This size does not include the size required to store metadata or shared dictionaries.
trim_reasontrim_reason tinyinttinyint 圧縮された行グループをトリガーした理由は、行の最大数よりも少なくなっています。Reason that triggered the COMPRESSED row group to have less than the maximum number of rows.

0-UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1-NO_TRIM1 - NO_TRIM

2-BULKLOAD2 - BULKLOAD

3-再組織3 - REORG

4-DICTIONARY_SIZE4 - DICTIONARY_SIZE

5-MEMORY_LIMITATION5 - MEMORY_LIMITATION

6-RESIDUAL_ROW_GROUP6 - RESIDUAL_ROW_GROUP

7-STATS_MISMATCH7 - STATS_MISMATCH

8-スピルオーバー8 - SPILLOVER

9-AUTO_MERGE9 - AUTO_MERGE
trim_reason_desctrim_reason_desc nvarchar(60)nvarchar(60) Trim_reason の説明。Description of trim_reason.

0-UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: 以前のバージョンのからアップグレードするときに発生しました SQL ServerSQL Server0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Occurred when upgrading from the previous version of SQL ServerSQL Server.

1-NO_TRIM: 行グループは切り捨てられませんでした。1 - NO_TRIM: The row group was not trimmed. 行グループが最大1048576行で圧縮されました。The row group was compressed with the maximum of 1,048,576 rows. 行のサブセットが閉じられた後に行のサブセットが削除された場合、行の数が少なくなる可能性があります。The number of rows could be less if a subset of rows was deleted after delta rowgroup was closed

2-BULKLOAD: 一括読み込みバッチのサイズは、行の数に制限されています。2 - BULKLOAD: The bulk-load batch size limited the number of rows.

3-REORG: REORG コマンドの一部として強制圧縮。3 - REORG: Forced compression as part of REORG command.

4-DICTIONARY_SIZE: ディクショナリのサイズが大きすぎて、すべての行をまとめて圧縮できませんでした。4 - DICTIONARY_SIZE: Dictionary size grew too large to compress all of the rows together.

5-MEMORY_LIMITATION: すべての行をまとめて圧縮するのに十分なメモリがありません。5 - MEMORY_LIMITATION: Not enough available memory to compress all the rows together.

6-RESIDUAL_ROW_GROUP: インデックスの構築操作中に行 < 100万を含む最後の行グループの一部として閉じられました6 - RESIDUAL_ROW_GROUP: Closed as part of last row group with rows < 1 million during index build operation

7-STATS_MISMATCH: インメモリテーブルの列ストアのみです。7 - STATS_MISMATCH: Only for columnstore on in-memory table. Stats が不適切に示されている場合 >は、末尾に100万の修飾された行を指定しますが、これは少なくとも、圧縮された行グループは100万行を < します。If stats incorrectly indicated >= 1 million qualified rows in the tail but we found fewer, the compressed rowgroup will have < 1 million rows

8-スピルオーバー: インメモリテーブルの列ストアのみです。8 - SPILLOVER: Only for columnstore on in-memory table. 末尾 > に100万の行が含まれている場合、その数が 10 ~ 100万の場合、残りの行の最後のバッチは圧縮されます。If tail has > 1 million qualified rows, the last batch remaining rows are compressed if the count is between 100k and 1 million

9-AUTO_MERGE: バックグラウンドで実行されている組ムーバーのマージ操作で、この行グループに1つ以上の行グループが統合されています。9 - AUTO_MERGE: A Tuple Mover merge operation running in the background consolidated one or more rowgroups into this rowgroup.
transition_to_compressed_statetransition_to_compressed_state tinyinttinyint この行グループがデルタストアから列ストアの圧縮状態に移動した方法を示します。Shows how this rowgroup got moved from the deltastore to a compressed state in the columnstore.

1-NOT_APPLICABLE1- NOT_APPLICABLE

2-INDEX_BUILD2 - INDEX_BUILD

3-TUPLE_MOVER3 - TUPLE_MOVER

4-REORG_NORMAL4 - REORG_NORMAL

5-REORG_FORCED5 - REORG_FORCED

6-BULKLOAD6 - BULKLOAD

7-マージ7 - MERGE
transition_to_compressed_state_desctransition_to_compressed_state_desc nvarchar(60)nvarchar(60) 1-NOT_APPLICABLE-操作はデルタストアには適用されません。1 - NOT_APPLICABLE - the operation does not apply to the deltastore. または、にアップグレードする前に、行グループが圧縮されて SQL Server 2016 (13.x)SQL Server 2016 (13.x) います。この場合、履歴は保持されません。Or, the rowgroup was compressed prior to upgrading to SQL Server 2016 (13.x)SQL Server 2016 (13.x) in which case the history is not preserved.

2-INDEX_BUILD-インデックスの作成またはインデックスの再構築によって、行グループが圧縮されます。2 - INDEX_BUILD - An index create or index rebuild compressed the rowgroup.

3-TUPLE_MOVER-バックグラウンドで実行されている組ムーバーが、行グループを圧縮します。3 - TUPLE_MOVER - The tuple mover running in the background compressed the rowgroup. 組ムーバーは、行グループが状態をオープンから終了に変更した後に発生します。Tuple mover happens after the rowgroup changes state from OPEN to CLOSED.

4-REORG_NORMAL-再編成操作、ALTER INDEX...REORG は、終了した行グループをデルタストアから列ストアに移動しました。4 - REORG_NORMAL - The reorganization operation, ALTER INDEX ... REORG, moved the CLOSED rowgroup from the deltastore to the columnstore. これは、組ムーバーが行グループを移動するのに時間があった前に発生しました。This occurred before the tuple-mover had time to move the rowgroup.

5-REORG_FORCED-この行グループはデルタストアで開かれており、行をすべて保持する前に列ストアに強制されていました。5 - REORG_FORCED - This rowgroup was open in the deltastore and was forced into the columnstore before it had a full number of rows.

6-BULKLOAD-一括読み込み操作では、デルタストアを使用せずに行グループを直接圧縮しました。6 - BULKLOAD - A bulk-load operation compressed the rowgroup directly without using the deltastore.

7-MERGE-マージ操作では、1つ以上の行グループをこの行グループに統合し、列ストア圧縮を実行しました。7 - MERGE - A merge operation consolidated one or more rowgroups into this rowgroup and then performed the columnstore compression.
has_vertipaq_optimizationhas_vertipaq_optimization bitbit VertiPaq の最適化では、より高い圧縮を実現するために、行グループ内の行の順序を再調整することによって列ストア圧縮が向上します。VertiPaq optimization improves columnstore compression by rearranging the order of the rows in the rowgroup to achieve higher compression. ほとんどの場合、この最適化は自動的に行われます。This optimization occurs automatically in most cases. VertiPaq の最適化が使用されない場合は、次の2つのケースがあります。There are two cases where VertiPaq optimization is not used:
a.a. デルタ行グループが列ストアに移動し、列ストアインデックスに1つ以上の非クラスター化インデックスがある場合、この例では、マッピングインデックスへの変更を最小限に抑えるために、VertiPaq の最適化がスキップされます。when a delta rowgroup moves into the columnstore and there are one or more nonclustered indexes on the columnstore index - in this case VertiPaq optimization is skipped to minimizes changes to the mapping index;
b.b. メモリ最適化テーブルの列ストアインデックスの場合。for columnstore indexes on memory-optimized tables.

0 = いいえ0 = No

1 = はい1 = Yes
generationgeneration bigintbigint この行グループに関連付けられている行グループの生成。Row group generation associated with this row group.
created_timecreated_time datetime2datetime2 この行グループが作成された時刻。Clock time for when this rowgroup was created.

NULL-インメモリテーブルの列ストアインデックスの場合。NULL - for a columnstore index on an in-memory table.
closed_timeclosed_time datetime2datetime2 この行グループが終了した時刻。Clock time for when this rowgroup was closed.

NULL-インメモリテーブルの列ストアインデックスの場合。NULL - for a columnstore index on an in-memory table.
     

結果Results

現在のデータベース内の各行グループに対して1行のデータを返します。Returns one row for each rowgroup in the current database.

アクセス許可Permissions

CONTROLテーブルに対する権限と VIEW DATABASE STATE 、データベースに対する権限が必要です。Requires CONTROL permission on the table and VIEW DATABASE STATE permission on the database.

Examples

A.A. 断片化を計算して、列ストアインデックスを再編成または再構築するタイミングを決定します。Calculate fragmentation to decide when to reorganize or rebuild a columnstore index.

列ストアインデックスの場合、行グループの断片化を解消するには、削除された行の割合を使用することをお勧めします。For columnstore indexes, the percent of deleted rows is a good measure for the fragmentation in a rowgroup. 断片化が20% 以上の場合は、削除された行を削除します。When the fragmentation is 20% or more, remove the deleted rows. 他の例については、「 インデックスの再編成と再構築」を参照してください。For more examples, see Reorganize and Rebuild Indexes.

この例では、 sys.dm_db_column_store_row_group_physical_stats を他のシステムテーブルと結合し、 Fragmentation 現在のデータベース内の各行グループの効率の推定値として列を計算します。This example joins sys.dm_db_column_store_row_group_physical_stats with other system tables and then calculates the Fragmentation column as an estimate of the efficiency of each row group in the current database. 1つのテーブルに関する情報を検索するには、 WHERE 句の前にあるコメントハイフンを削除し、テーブル名を指定します。To find information on a single table, remove the comment hyphens in front of the WHERE clause and provide a table name.

SELECT i.object_id,   
    object_name(i.object_id) AS TableName,   
    i.name AS IndexName,   
    i.index_id,   
    i.type_desc,   
    CSRowGroups.*,  
    100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0) AS 'Fragmentation'
FROM sys.indexes AS i  
JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups  
    ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id   
-- WHERE object_name(i.object_id) = 'table_name'   
ORDER BY object_name(i.object_id), i.name, row_group_id;  

参照See Also

オブジェクト カタログ ビュー (Transact-SQL) Object Catalog Views (Transact-SQL)
カタログ ビュー (Transact-SQL) Catalog Views (Transact-SQL)
列ストア インデックスのアーキテクチャ Columnstore Index Architecture
SQL Server システムカタログに対するクエリについてよく寄せられる質問 Querying the SQL Server System Catalog FAQ
sys.columns (Transact-SQL) sys.columns (Transact-SQL)
sys.all_columns (Transact-sql) sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-sql)sys.computed_columns (Transact-SQL)
sys.column_store_dictionaries (Transact-sql) sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)sys.column_store_segments (Transact-SQL)