Partilhar via


sys.column_store_segments (Transact-SQL)

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores Azure SQL Managed Instance

Devolve uma linha para cada segmento de coluna num índice columnstore. Existe um segmento de coluna por coluna por grupo de linhas. Por exemplo, uma tabela com 10 grupos de linhas e 34 colunas devolve 340 linhas.

Nome da coluna Tipo de dados Description
partition_id bigint Indica o ID da partição. É exclusivo dentro de um banco de dados.
hobt_id bigint ID do heap ou índice da árvore B (HoBT) para a tabela que tem este índice de stock.
column_id int ID da coluna columnstore.
segment_id int ID do grupo de linhas. Para compatibilidade retroativa, o nome da coluna continua a ser chamado segment_id mesmo sendo o ID do grupo de linhas. Pode identificar um segmento de forma única usando <hobt_id, partition_id, column_id>, <segment_id>.
Versão int Versão do formato de segmento de coluna.
encoding_type int Tipo de codificação usada para esse segmento:

1 = VALUE_BASED - não-string/binário sem dicionário (semelhante ao 4 com algumas variações internas)

2 = VALUE_HASH_BASED - coluna não-string/binária com valores comuns no dicionário

3 = STRING_HASH_BASED - string/coluna binária com valores comuns no dicionário

4 = STORE_BY_VALUE_BASED - não-string/binário sem dicionário

5 = STRING_STORE_BY_VALUE_BASED - string/binário sem dicionário

Para obter mais informações, consulte a seção Observações.
row_count int Número de filas no grupo de filas.
has_nulls int 1 se o segmento da coluna tiver valores nulos.
base_id bigint ID de valor base se estiver a ser usado o tipo de codificação 1. Se não estiver a ser usado o tipo de codificação 1, base_id é definido para -1.
Magnitude float Magnitude se estiver a ser usada a codificação tipo 1. Se a codificação tipo 1 não for utilizada, a magnitude é definida para -1.
primary_dictionary_id int Um valor de 0 representa o dicionário global. Um valor de -1 indica que não existe um dicionário global criado para esta coluna.
secondary_dictionary_id int Um valor não nulo aponta para o dicionário local desta coluna no segmento atual (por exemplo, o grupo de linhas). Um valor de -1 indica que não existe dicionário local para este segmento.
min_data_id bigint ID mínimo de dados no segmento da coluna.
max_data_id bigint ID máximo de dados no segmento da coluna.
null_value bigint Valor usado para representar nulos.
on_disk_size bigint Tamanho do segmento em bytes.
collation_id int Aplica-se ao SQL Server 2022 (16.x) e posteriores.
A classificação atual quando o segmento foi criado. Corresponde a um ID interno. Atualmente apenas interna e não para desenvolvimento.
min_deep_data Varbinary(18) Aplica-se ao SQL Server 2022 (16.x) e posteriores.
Usado para eliminação de segmentos. 1 Para uso interno apenas.
max_deep_data Varbinary(18) Aplica-se ao SQL Server 2022 (16.x) e posteriores.
Usado para eliminação de segmentos. 1 Para uso interno apenas.

1 Após atualizar para uma versão do SQL Server que suporta a eliminação de segmentos mínimos/máximos de cadeias (SQL Server 2022 (16.x) e posteriores), min_deep_data e max_deep_data que permanecerá NULL até depois de o índice da columnstore ser reconstruído, usando um REBUILD ou DROP/CREATE. Após uma reconstrução, os segmentos que contêm tipos de dados que podem beneficiar da eliminação min/max de segmentos de string conterão dados.

Observações

O tipo de codificação de segmento columnstore é selecionado pelo Motor de Base de Dados com o objetivo de obter o menor custo de armazenamento, analisando os dados do segmento. Se os dados forem maioritariamente distintos, o Motor de Base de Dados utiliza codificação baseada em valores. Se os dados não forem maioritariamente distintos, o Motor de Base de Dados utiliza codificação baseada em hash. A escolha entre codificação baseada em strings e baseada em valores está relacionada com o tipo de dados armazenados, sejam dados string ou binários. Todas as codificações aproveitam o bit-packing e a codificação por comprimento de execução sempre que possível.

A eliminação de segmentos de Column Store aplica-se a tipos de dados numéricos, de data e hora, e ao tipo de dado datetimeoffset com escala menor ou igual a dois. A partir do SQL Server 2022 (16.x), os recursos de eliminação de segmento se estendem aos tipos de dados string, binário, guid e datetimeoffset para escala maior que dois. A eliminação de segmentos não se aplica a tipos de dados LOB, como os comprimentos máximos dos tipos de dados.

Permissions

Todas as colunas requerem pelo menos VIEW DEFINITION permissão na tabela. As colunas seguintes retornam NULL , a menos que o utilizador também tenha SELECT permissão: has_nulls, base_id, magnitude, min_data_id, max_data_id, e null_value.

A visibilidade dos metadados nas visualizações de catálogo é limitada aos itens de segurança que um utilizador possui ou nos quais o utilizador recebeu alguma permissão. Para obter mais informações, consulte Configuração de visibilidade de metadados.

Examples

A consulta seguinte devolve informações sobre segmentos de um índice de column store.

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

Próximos passos