sys.column_store_segments (Transact-SQL)

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores de Azure SQL Instancia administrada

Devuelve una fila para cada segmento de columna en un índice de almacén de columnas. Hay un segmento de columna por columna por grupo de filas. Por ejemplo, una tabla con 10 grupos de filas y 34 columnas devuelve 340 filas.

Nombre de la columna Tipo de datos Descripción
partition_id bigint Indica el identificador de partición. Es único en una base de datos.
hobt_id bigint Identificador del montón o índice de árbol B (HoBT) de la tabla que tiene este índice de almacén de columnas.
column_id int Identificador de la columna de almacén de columnas.
segment_id int Identificador del grupo de filas. Por motivos de compatibilidad con versiones anteriores, se sigue llamando al nombre de columna segment_id aunque se trata del identificador del grupo de filas. Puede identificar de forma única un segmento mediante <hobt_id, partition_id, column_id>, <segment_id>.
version int Versión del formato de segmento de columna.
encoding_type int Tipo de codificación que se usa para ese segmento:

1 = VALUE_BASED: no string/binary sin diccionario (similar a 4 con algunas variaciones internas)

2 = VALUE_HASH_BASED: columna no string/binaria con valores comunes en el diccionario

3 = STRING_HASH_BASED: cadena/columna binaria con valores comunes en el diccionario

4 = STORE_BY_VALUE_BASED: no string/binary sin diccionario

5 = STRING_STORE_BY_VALUE_BASED: cadena/binario sin diccionario

Para obtener más información, vea la sección Notas.
row_count int Número de filas del grupo de filas.
has_nulls int 1 si el segmento de la columna tiene valores NULL.
base_id bigint Id. de valor base si se usa el tipo de codificación 1. Si no se usa el tipo de codificación 1, base_id se establece en -1.
magnitud float Magnitud si se usa el tipo de codificación 1. Si no se usa el tipo de codificación 1, la magnitud se establece en -1.
primary_dictionary_id int Un valor de 0 representa el diccionario global. Un valor de -1 indica que no hay ningún diccionario global creado para esta columna.
secondary_dictionary_id int Un valor distinto de cero apunta al diccionario local de esta columna en el segmento actual (por ejemplo, el grupo de filas). Un valor de -1 indica que no hay ningún diccionario local para este segmento.
min_data_id bigint Identificador de datos mínimo en el segmento de columna.
max_data_id bigint Identificador máximo de datos en el segmento de columna.
null_value bigint Valor usado para representar valores NULL.
on_disk_size bigint Tamaño del segmento en bytes.
collation_id int Se aplica a SQL Server 2022 (16.x) y versiones posteriores.
Intercalación actual cuando se creó el segmento. Se asigna a un identificador interno. Actualmente solo es interno y no para el desarrollo.
min_deep_data varbinary(18) Se aplica a SQL Server 2022 (16.x) y versiones posteriores.
Se usa para la eliminación de segmentos.1 Solo para uso interno.
max_deep_data varbinary(18) Se aplica a SQL Server 2022 (16.x) y versiones posteriores.
Se usa para la eliminación de segmentos.1 Solo para uso interno.

1 Después de actualizar a una versión de SQL Server que admita la eliminación de segmentos mínimos y máximos de cadena (SQL Server 2022 (16.x) y posteriores), min_deep_data y max_deep_data estará NULL hasta después de que se vuelva a generar el índice de almacén de columnas, mediante rebuild o DROP/CREATE. Después de una recompilación, los segmentos que contienen tipos de datos que pueden beneficiarse de la eliminación de segmentos mínimo/máximo de cadena contendrán datos.

Comentarios

El Motor de base de datos selecciona el tipo de codificación del segmento de almacén de columnas con el objetivo de lograr el menor costo de almacenamiento mediante el análisis de los datos del segmento. Si los datos son principalmente distintos, el Motor de base de datos usa la codificación basada en valores. Si los datos no son principalmente distintos, el Motor de base de datos usa la codificación basada en hash. La elección entre la codificación basada en cadenas y la codificación basada en valores está relacionada con el tipo de datos que se almacenan, ya sean datos de cadena o datos binarios. Todas las codificaciones aprovechan el empaquetado de bits y la codificación de longitud de ejecución siempre que sea posible.

La eliminación de segmentos de almacén de columnas se aplica a los tipos de datos numéricos, de fecha y hora, y al tipo de datos datetimeoffset con escala menor o igual que dos. A partir de SQL Server 2022 (16.x), las funcionalidades de eliminación de segmentos se extienden a los tipos de datos string, binary, guid y al tipo de datos datetimeoffset para la escala superior a dos. La eliminación de segmentos no se aplica a los tipos de datos LOB, como las longitudes de tipo de datos (max).

Permisos

Todas las columnas requieren al menos VIEW DEFINITION permiso en la tabla. Las columnas siguientes devuelven NULL a menos que el usuario también tenga SELECT permiso: has_nulls, base_id, magnitude, min_data_id, max_data_idy null_value.

La visibilidad de los metadatos en las vistas de catálogo se limita a los elementos protegibles y que son propiedad de un usuario o sobre los que el usuario ha recibido algún permiso. Para obtener más información, consulte Metadata Visibility Configuration.

Ejemplos

La consulta siguiente devuelve información acerca de los segmentos de un índice de almacén de columnas.

SELECT i.name, p.object_id, p.index_id, i.type_desc,
    COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
    ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
    ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;
GO

Pasos siguientes