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

SE APLICA A: síSQL Server síAzure SQL Database noAzure Synapse Analytics (SQL DW) noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Proporciona información de nivel de filas actual sobre todos los índices de almacén de columnas en la base de datos actual.Provides current rowgroup-level information about all of the columnstore indexes in the current database.

Esto extiende la vista de catálogo Sys. column_store_row_groups ()de Transact-SQL .This extends the catalog view sys.column_store_row_groups (Transact-SQL).

Nombre de la columnaColumn name Tipo de datosData type DescripciónDescription
object_idobject_id Interint IDENTIFICADOR de la tabla subyacente.ID of the underlying table.
index_idindex_id Interint IDENTIFICADOR de este índice de almacén de columnas en object_id tabla.ID of this columnstore index on object_id table.
partition_numberpartition_number Interint IDENTIFICADOR de la partición de tabla que contiene row_group_id.ID of the table partition that holds row_group_id. Puede utilizar partition_number para unir esta DMV a sys.partitions.You can use partition_number to join this DMV to sys.partitions.
row_group_idrow_group_id Interint IDENTIFICADOR de este grupo de filas.ID of this row group. En el caso de las tablas con particiones, el valor es único dentro de la partición.For partitioned tables, value is unique within the partition.

-1 para una cola en memoria.-1 for an in-memory tail.
delta_store_hobt_iddelta_store_hobt_id bigintbigint Hobt_id para un grupo de filas en el almacén Delta.The hobt_id for a row group in the delta store.

Es NULL si el grupo de filas no está en el almacén Delta.NULL if row group is not in the delta store.

NULL para la cola de una tabla en memoria.NULL for tail of an in-memory table.
Statestate tinyinttinyint Número de identificación asociado state_description.ID number associated state_description.

0 = INVISIBLE0 = INVISIBLE

1 = OPEN1 = OPEN

2 = CLOSED2 = CLOSED

3 = COMPRESSED3 = COMPRESSED

4 = MARCADORES DE EXCLUSIÓN4 = TOMBSTONE

Compressed es el único Estado que se aplica a las tablas en memoria.COMPRESSED is the only state that applies to in-memory tables.
state_descstate_desc nvarchar (60)nvarchar(60) Descripción del estado del grupo de filas:Description of the row group state:

INVISIBLE: un grupo de filas que se está compilando.INVISIBLE -A row group that is being built. Por ejemplo:For example:
Un grupo de filas del almacén de columnas es INVISIBLE mientras se comprimen los datos.A row group in the columnstore is INVISIBLE while the data is being compressed. Una vez finalizada la compresión, un cambio de metadatos cambia el estado del grupo de filas de almacén de columnas de INVISIBLE a comprimido, y el estado del grupo de filas almacén Delta de cerrado a EXTINGUIdo.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.

OPEN: Grupo de filas almacén Delta que acepta nuevas filas.OPEN - A deltastore row group that is accepting new rows. Un grupo de filas abierto está todavía en formato de almacén de filas y no se ha comprimido al formato de almacén de columnas.An open row group is still in rowstore format and has not been compressed to columnstore format.

CLOSED: un grupo de filas en el almacén Delta que contiene el número máximo de filas y está esperando a que el proceso de motor de tupla lo comprimirá en el almacén de columnas.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.

COMPRIMIDO: Grupo de filas que se comprime con la compresión de almacén de columnas y se almacena en el almacén de columnas.COMPRESSED - A row group that is compressed with columnstore compression and stored in the columnstore.

Desecho: un grupo de filas que se encontraba anteriormente en el almacén Delta y que ya no se usa.TOMBSTONE - A row group that was formerly in the deltastore and is no longer used.
total_rowstotal_rows bigintbigint Número de filas almacenadas físicamente en el grupo de filas.Number of rows physical stored in the row group. Para grupos de filas comprimidos.For compressed row groups. Incluye las filas marcadas como eliminadas.Includes the rows that are marked deleted.
deleted_rowsdeleted_rows bigintbigint Número de filas almacenadas físicamente en un grupo de filas comprimido que se han marcado para su eliminación.Number of rows physically stored in a compressed row group that are marked for deletion.

Es 0 en el caso de los grupos de filas que se encuentran en el almacén delta.0 for row groups that are in the delta store.
size_in_bytessize_in_bytes bigintbigint Tamaño combinado, en bytes, de todas las páginas de este grupo de filas.Combined size, in bytes, of all the pages in this row group. Este tamaño no incluye el tamaño necesario para almacenar metadatos o diccionarios compartidos.This size does not include the size required to store metadata or shared dictionaries.
trim_reasontrim_reason tinyinttinyint Motivo por el que desencadenó el grupo de filas COMPRIMIDOs para que tenga menos del número máximo de filas.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-CARGA MASIVA2 - BULKLOAD

3-REORG3 - REORG

4-DICTIONARY_SIZE4 - DICTIONARY_SIZE

5-MEMORY_LIMITATION5 - MEMORY_LIMITATION

6-RESIDUAL_ROW_GROUP6 - RESIDUAL_ROW_GROUP

7-STATS_MISMATCH7 - STATS_MISMATCH

8-SOBRANTE8 - SPILLOVER
trim_reason_desctrim_reason_desc nvarchar (60)nvarchar(60) Descripción de trim_reason.Description of trim_reason.

0-UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: se produjo al actualizar desde la versión anterior de SQL ServerSQL Server.0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Occurred when upgrading from the previous version of SQL ServerSQL Server.

1-NO_TRIM: no se recortó el grupo de filas.1 - NO_TRIM: The row group was not trimmed. El grupo de filas se comprimió con el máximo de 1.048.476 filas.The row group was compressed with the maximum of 1,048,476 rows. El número de filas puede ser menor si un subconjunto de filas se eliminó después de que se cerrara Delta filasThe number of rows could be less if a subset of rows was deleted after delta rowgroup was closed

2-bulk-Bulk: el tamaño del lote de carga masiva limitó el número de filas.2 - BULKLOAD: The bulk-load batch size limited the number of rows.

3-REORG: compresión forzada como parte del comando REORG.3 - REORG: Forced compression as part of REORG command.

4-DICTIONARY_SIZE: el tamaño del diccionario creció demasiado para comprimir todas las filas juntas.4 - DICTIONARY_SIZE: Dictionary size grew too large to compress all of the rows together.

5-MEMORY_LIMITATION: no hay suficiente memoria disponible para comprimir todas las filas juntas.5 - MEMORY_LIMITATION: Not enough available memory to compress all the rows together.

6-RESIDUAL_ROW_GROUP: cerrado como parte del último grupo de filas con filas < 1 millón durante la operación de generación de índice6 - RESIDUAL_ROW_GROUP: Closed as part of last row group with rows < 1 million during index build operation

STATS_MISMATCH: solo para el almacén de columnas en la tabla en memoria.STATS_MISMATCH: Only for columnstore on in-memory table. Si las estadísticas se indican incorrectamente >= 1 millón filas calificadas en la cola pero encontramos menos, el filas comprimido tendrá < 1 millón filas.If stats incorrectly indicated >= 1 million qualified rows in the tail but we found fewer, the compressed rowgroup will have < 1 million rows

SOBRANTE: solo para el almacén de columnas en la tabla en memoria.SPILLOVER: Only for columnstore on in-memory table. Si el final de la cola tiene > 1 millón filas completas, el último lote restante filas se comprimen si el recuento está entre 100 y 1 millónIf tail has > 1 million qualified rows, the last batch remaining rows are compressed if the count is between 100k and 1 million
transition_to_compressed_statetransition_to_compressed_state tinyinttinyint Muestra cómo se ha pasado este filas de almacén Delta a un estado comprimido en el almacén de columnas.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-CARGA MASIVA6 - BULKLOAD

7-FUSIONAR MEDIANTE COMBINACIÓN7 - MERGE
transition_to_compressed_state_desctransition_to_compressed_state_desc nvarchar(60)nvarchar(60) NOT_APPLICABLE: la operación no se aplica a almacén Delta.NOT_APPLICABLE - the operation does not apply to the deltastore. O bien, el filas se comprimió antes de actualizar SQL Server 2016 (13.x)SQL Server 2016 (13.x) a, en cuyo caso no se conserva el historial.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.

INDEX_BUILD: una creación de índice o una regeneración de índice comprimida el filas.INDEX_BUILD - An index create or index rebuild compressed the rowgroup.

TUPLE_MOVER: el Movedor de tupla que se ejecuta en el fondo ha comprimido el filas.TUPLE_MOVER - The tuple mover running in the background compressed the rowgroup. El motor de tupla se produce después de que el filas cambie el estado de abierto a cerrado.Tuple mover happens after the rowgroup changes state from OPEN to CLOSED.

REORG_NORMAL: la operación de reorganización, ALTER INDEX... REORG, se mueve el filas cerrado del almacén delta al almacén de columnas.REORG_NORMAL - The reorganization operation, ALTER INDEX ... REORG, moved the CLOSED rowgroup from the deltastore to the columnstore. Esto ocurrió antes de que el motor de tupla tuviera tiempo para mover el filas.This occurred before the tuple-mover had time to move the rowgroup.

REORG_FORCED: este filas estaba abierto en almacén Delta y se forzó en el almacén de columnas antes de que tuviera un número completo de filas.REORG_FORCED - This rowgroup was open in the deltastore and was forced into the columnstore before it had a full number of rows.

Bulk-una operación de carga masiva comprime el filas directamente sin usar almacén Delta.BULKLOAD - A bulk-load operation compressed the rowgroup directly without using the deltastore.

MERGE: una operación de combinación consolidada uno o más filas en este filas y, a continuación, realizó la compresión del almacén de columnas.MERGE - A merge operation consolidated one or more rowgroups into this rowgroup and then performed the columnstore compression.
has_vertipaq_optimizationhas_vertipaq_optimization bitbit La optimización de VertiPaq mejora la compresión del almacén de columnas reorganizando el orden de las filas en filas para lograr una mayor compresión.VertiPaq optimization improves columnstore compression by rearranging the order of the rows in the rowgroup to achieve higher compression. Esta optimización se produce automáticamente en la mayoría de los casos.This optimization occurs automatically in most cases. Hay dos casos en los que no se usa la optimización de VertiPaq:There are two cases where VertiPaq optimization is not used:
a.a. Cuando un filas Delta se mueve al almacén de columnas y hay uno o varios índices no clúster en el índice de almacén de columnas, en este caso se omite la optimización de VertiPaq para minimizar los cambios en el índice de asignación.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. para los índices de almacén de columnas en tablas optimizadas para memoria.for columnstore indexes on memory-optimized tables.

0 = No0 = No

1 = Sí1 = Yes
últimageneration bigintbigint Generación de grupos de filas asociada a este grupo de filas.Row group generation associated with this row group.
created_timecreated_time datetime2datetime2 Hora de reloj en la que se creó este filas.Clock time for when this rowgroup was created.

NULL: para un índice de almacén de columnas en una tabla en memoria.NULL - for a columnstore index on an in-memory table.
 
closed_timeclosed_time datetime2datetime2 Hora de reloj en la que se cerró este filas.Clock time for when this rowgroup was closed.

NULL: para un índice de almacén de columnas en una tabla en memoria.NULL - for a columnstore index on an in-memory table.
 
     

ResultsResults

Devuelve una fila por cada filas en la base de datos actual.Returns one row for each rowgroup in the current database.

PermisosPermissions

Requiere CONTROL el permiso en la tabla VIEW DATABASE STATE y el permiso en la base de datos.Requires CONTROL permission on the table and VIEW DATABASE STATE permission on the database.

EjemplosExamples

a.A. Calcular la fragmentación para decidir cuándo reorganizar o volver a generar un índice de almacén de columnas.Calculate fragmentation to decide when to reorganize or rebuild a columnstore index.

En el caso de los índices de almacén de columnas, el porcentaje de filas eliminadas es una buena medida para la fragmentación en un filas.For columnstore indexes, the percent of deleted rows is a good measure for the fragmentation in a rowgroup. Si la fragmentación es del 20% o más, quite las filas eliminadas.When the fragmentation is 20% or more, remove the deleted rows. Para obtener más ejemplos, vea reorganizar y volver a generar índices.For more examples, see Reorganize and Rebuild Indexes.

Este ejemplo combina Sys. dm_db_column_store_row_group_physical_stats con otras tablas del sistema y, a continuación, Fragmentation calcula la columna como una estimación de la eficacia de cada grupo de filas en la base de datos actual.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. Para buscar información en una sola tabla, quite los guiones de comentario delante de la cláusula Where y proporcione un nombre de tabla.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;  

Véase tambiénSee Also

Vistas de catálogo de objetos (Transact-SQL) Object Catalog Views (Transact-SQL)
Vistas de catálogo (Transact-SQL) Catalog Views (Transact-SQL)
Arquitectura de índice de almacén de columnas Columnstore Index Architecture
Preguntas más frecuentes sobre el catálogo del sistema de 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)