sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Proporciona información de nivel de grupo de filas actual sobre todos los índices de almacén de columnas de la base de datos actual.

Esto extiende la vista de catálogo sys.column_store_row_groups (Transact-SQL).

Nombre de la columna Tipo de datos Descripción
object_id int Identificador de la tabla subyacente.
id_de_índice int Identificador de este índice de almacén de columnas en object_id tabla.
partition_number int Identificador de la partición de tabla que contiene row_group_id. Puede utilizar partition_number para unir esta DMV a sys.partitions.
row_group_id int Id. de este grupo de filas. En el caso de las tablas con particiones, el valor es único dentro de la partición.

-1 para una cola en memoria.
delta_store_hobt_id bigint El hobt_id de un grupo de filas en el almacén delta.

NULL si el grupo de filas no está en el almacén delta.

NULL para la cola de una tabla en memoria.
state tinyint Número de identificador asociado state_description.

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = TOMBSTONE

COMPRESSED es el único estado que se aplica a las tablas en memoria.
state_desc nvarchar(60) Descripción del estado del grupo de filas:

0 - INVISIBLE : un grupo de filas que se está compilando. Por ejemplo:
Un grupo de filas del almacén de columnas es INVISIBLE mientras se comprimen los datos. Cuando la compresión finaliza, un modificador de metadatos cambia el estado del grupo de filas de almacén de columnas de INVISIBLE a COMPRESSED y el estado del grupo de filas de almacén delta de CLOSED a TOMBSTONE.

1 - OPEN: un grupo de filas de almacén delta que acepta nuevas filas. 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.

2 - CERRADO: un grupo de filas en el almacén delta que contiene el número máximo de filas y está esperando que el proceso de movimiento de tupla lo comprima en el almacén de columnas.

3 - COMPRIMIDO: un grupo de filas comprimido con compresión de almacén de columnas y almacenado en el almacén de columnas.

4 - TOMBSTONE: un grupo de filas que anteriormente estaba en el almacén delta y ya no se usa.
total_rows bigint Número de filas almacenadas físicamente en el grupo de filas. Para grupos de filas comprimidos. Incluye las filas marcadas como eliminadas.
deleted_rows bigint Número de filas almacenadas físicamente en un grupo de filas comprimido que se han marcado para su eliminación.

Es 0 en el caso de los grupos de filas que se encuentran en el almacén delta.
size_in_bytes bigint Tamaño combinado, en bytes, de todas las páginas de este grupo de filas. Este tamaño no incluye el tamaño necesario para almacenar metadatos o diccionarios compartidos.
trim_reason tinyint Motivo por el que se desencadenó el grupo de filas COMPRESSED para que tenga menos del número máximo de filas.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1 - NO_TRIM

2 - BULKLOAD

3 - REORG

4 - DICTIONARY_SIZE

5 - MEMORY_LIMITATION

6 - RESIDUAL_ROW_GROUP

7 - STATS_MISMATCH

8 - DESBORDAMIENTO

9 - AUTO_MERGE
trim_reason_desc nvarchar(60) Descripción de trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: se produjo al actualizar desde la versión anterior de SQL Server.

1 - NO_TRIM: el grupo de filas no se ha recortado. El grupo de filas se ha comprimido con un máximo de 1 048 576 filas. El número de filas podría ser menor si se eliminó un subconjunto de filas después de cerrar el grupo de filas delta.

2 - BULKLOAD: el tamaño del lote de carga masiva limita el número de filas.

3 - REORG: compresión forzada como parte del comando REORG.

4 - DICTIONARY_SIZE: el tamaño del diccionario creció demasiado grande para comprimir todas las filas juntas.

5 - MEMORY_LIMITATION: memoria no suficiente disponible para comprimir todas las filas juntas.

6 - RESIDUAL_ROW_GROUP: cerrado como parte del último grupo de filas con filas < 1 millón durante la operación de compilación del índice. Nota: Una compilación de partición con varios núcleos puede dar lugar a más de un recorte de este tipo.

7 - STATS_MISMATCH: solo para almacén de columnas en la tabla en memoria. Si las estadísticas indican >incorrectamente = 1 millón de filas calificadas en la cola, pero encontramos menos, el grupo de filas comprimido tendrá < 1 millón de filas.

8 - SPILLOVER: solo para almacén de columnas en la tabla en memoria. Si el final tiene > 1 millón de filas calificadas, las últimas filas restantes del lote se comprimen si el recuento está comprendido entre 100 000 y 1 millón.

9 - AUTO_MERGE: una operación de combinación de Tuple Mover que se ejecuta en segundo plano consolida uno o varios grupos de filas en este grupo de filas.
transition_to_compressed_state TINYINT Muestra cómo este grupo de filas se movió del almacén delta a un estado comprimido en el almacén de columnas.

1- NOT_APPLICABLE

2 - INDEX_BUILD

3 - TUPLE_MOVER

4 - REORG_NORMAL

5 - REORG_FORCED

6 - BULKLOAD

7 - MERGE
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE : la operación no se aplica al almacén delta. O bien, el grupo de filas se comprimió antes de actualizar a SQL Server 2016 (13.x) en cuyo caso no se conserva el historial.

2 - INDEX_BUILD : un índice de creación o recompilación de índices comprimió el grupo de filas.

3 - TUPLE_MOVER : el motor de tupla que se ejecuta en segundo plano comprimió el grupo de filas. El mover de tupla se produce después de que el grupo de filas cambie el estado de OPEN a CLOSED.

4 - REORG_NORMAL - La operación de reorganización, ALTER INDEX ... REORG, movió el grupo de filas CLOSED del almacén delta al almacén de columnas. Esto ocurrió antes de que el motor de tupla tuviera tiempo para mover el grupo de filas.

5 - REORG_FORCED : este grupo de filas estaba abierto en el almacén delta y se vio forzado al almacén de columnas antes de que tuviera un número completo de filas.

6 - BULKLOAD: una operación de carga masiva comprimió el grupo de filas directamente sin usar el almacén delta.

7 - MERGE: una operación de combinación consolida uno o varios grupos de filas en este grupo de filas y, a continuación, realiza la compresión del almacén de columnas.
has_vertipaq_optimization bit La optimización de VertiPaq mejora la compresión del almacén de columnas reorganizando el orden de las filas del grupo de filas para lograr una compresión mayor. Esta optimización se produce automáticamente en la mayoría de los casos. Hay dos casos en los que no se usa la optimización de VertiPaq:
a. cuando un grupo de filas delta se mueve al almacén de columnas y hay uno o varios índices no agrupados en el índice de almacén de columnas; en este caso, se omite la optimización vertiPaq para minimizar los cambios en el índice de asignación;
b. para índices de almacén de columnas en tablas optimizadas para memoria.

0 = No

1 = Sí
Generación bigint Generación de grupos de filas asociada a este grupo de filas.
created_time datetime2 Hora del reloj para el momento en que se creó este grupo de filas.

NULL: para un índice de almacén de columnas en una tabla en memoria.
closed_time datetime2 Hora del reloj para el momento en que se cerró este grupo de filas.

NULL: para un índice de almacén de columnas en una tabla en memoria.

Results

Devuelve una fila para cada grupo de filas de la base de datos actual.

Permisos

Requiere CONTROL permiso en la tabla y VIEW DATABASE STATE el permiso en la base de datos.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VIEW DATABASE PERFORMANCE STATE en la base de datos.

Ejemplos

A. Calcule la fragmentación para decidir cuándo reorganizar o recompilar un índice de almacén de columnas.

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 grupo de filas. Cuando la fragmentación es del 20 % o más, quite las filas eliminadas. Para obtener más ejemplos, vea Reorganizar y recompilar índices.

En este ejemplo se combina sys.dm_db_column_store_row_group_physical_stats con otras tablas del sistema y, a continuación, se calcula la Fragmentation columna como una estimación de la eficacia de cada grupo de filas de la base de datos actual. Para buscar información sobre una sola tabla, quite los guiones de comentario delante de la cláusula WHERE y proporcione un nombre de tabla.

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;  

Consulte también

Vistas de catálogo de objetos (Transact-SQL)
Vistas de catálogo (Transact-SQL)
Diseño de los índices de almacén de columnas
Consultar las preguntas más frecuentes (P+F) del catálogo del sistema de SQL Server
sys.columns (Transact-SQL)
sys.all_columns (Transact-SQL)
sys.computed_columns (Transact-SQL)
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)