Compartir a través de


sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

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

Esta DMV amplía la vista de catálogo sys.column_store_row_groups.

Nombre de la columna Tipo de dato Description
object_id int Identificador de la tabla subyacente.
index_id int Identificador de este índice de almacén de columnas en object_id la tabla.
partition_number int Identificador de la partición de tabla que contiene row_group_id. Puede usar partition_number para unir esta DMV a sys.partitions
row_group_id int Identificador de este grupo de filas. Para 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 el final 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 finaliza la compresión, un modificador de metadatos cambia el estado del grupo de filas de almacén de columnas de INVISIBLE a COMPRESSEDy 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 sigue en formato de almacén de filas y no se ha comprimido en formato de almacén de columnas.

2 - CLOSED - Un grupo de filas en el almacén delta que contiene el número máximo de filas y está esperando que el proceso del mover de tupla se comprima en el almacén de columnas.

3 - COMPRESSED - 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.

0 para los grupos de filas que se encuentran en el almacén delta.

En el caso de los índices de almacén de columnas no agrupados, este valor no incluye las filas eliminadas almacenadas en el búfer de eliminación. Para obtener más información y buscar el número de filas eliminadas en el búfer de eliminación, consulte sys.internal_partitions.
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 COMPRESSED grupo de filas para tener 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 - SPILLOVER
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 REORG comando.

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

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

6 - RESIDUAL_ROW_GROUP: se cierra 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 consolidada uno o varios grupos de filas en este grupo de filas.
transition_to_compressed_state tinyint Muestra cómo se ha movido este grupo de filas 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 - Una creación de índice 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 CLOSED grupo de filas 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 obligó a entrar en el almacén de columnas antes de tener 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 consolidó uno o varios grupos de filas en este grupo de filas y, a continuación, realizó 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 mayor compresión. 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í
generation 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.

Permissions

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 permiso VIEW DATABASE PERFORMANCE STATE en la base de datos.

Examples

A. Calcular 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, consulte Optimización del mantenimiento de índices para mejorar el rendimiento de las consultas y reducir el consumo de recursos.

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 WHERE cláusula 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
     INNER 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;