sys.column_store_segments (Transact-SQL)

Aplica-se a: SQL Server 2012 (11.x) e posterior Instância Gerenciada de SQL do Azure

Retorna uma linha para cada segmento de coluna em um índice columnstore. Há um segmento de coluna por coluna por rowgroup. Por exemplo, uma tabela com 10 rowgroups e 34 colunas retorna 340 linhas.

Nome da coluna Tipo de dados Descrição
partition_id bigint Indica a ID da partição. É exclusivo em um banco de dados.
hobt_id bigint ID do heap ou índice de árvore B (HoBT) para a tabela que tem esse índice columnstore.
column_id int ID da coluna columnstore.
segment_id int ID do rowgroup. Para compatibilidade com versões anteriores, o nome da coluna continua a ser chamado segment_id mesmo que essa seja a ID do rowgroup. Você pode identificar exclusivamente um segmento usando <hobt_id, partition_id, column_id> segment_id<>.
version int Versão de formato do segmento de coluna.
encoding_type int Tipo de codificação usado para esse segmento:

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

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

3 = STRING_HASH_BASED - cadeia de caracteres/coluna binária com valores comuns no dicionário

4 = STORE_BY_VALUE_BASED - não cadeia de caracteres/binário sem dicionário

5 = STRING_STORE_BY_VALUE_BASED - cadeia de caracteres/binário sem dicionário

Para obter mais informações, consulte a seção Comentários.
row_count int Número de linhas no grupo de linhas.
has_nulls int 1 se o segmento de coluna tiver valores nulos.
base_id bigint ID do valor base se o tipo de codificação 1 estiver sendo usado. Se o tipo de codificação 1 não estiver sendo usado, base_id será definido como -1.
Magnitude float Magnitude se o tipo de codificação 1 estiver sendo usado. Se o tipo de codificação 1 não estiver sendo usado, a magnitude será definida como -1.
primary_dictionary_id int Um valor 0 representa o dicionário global. Um valor de -1 indica que não há nenhum dicionário global criado para esta coluna.
secondary_dictionary_id int Um valor diferente de zero aponta para o dicionário local dessa coluna no segmento atual (por exemplo, o rowgroup). Um valor de -1 indica que não há dicionário local para esse segmento.
min_data_id bigint ID de dados mínima no segmento de coluna.
max_data_id bigint ID de dados máxima no segmento de coluna.
null_value bigint Valor usado para representar nulos.
on_disk_size bigint Tamanho do segmento em bytes.
collation_id int Aplica-se a SQL Server 2022 (16.x) e posterior.
Ordenação atual quando o segmento foi criado. Mapeia para uma ID interna. Atualmente somente interno e não para desenvolvimento.
min_deep_data varbinary(18) Aplica-se a SQL Server 2022 (16.x) e posterior.
Usado para eliminação de segmento. 1 Somente para uso interno.
max_deep_data varbinary(18) Aplica-se a SQL Server 2022 (16.x) e posterior.
Usado para eliminação de segmento. 1 Somente para uso interno.

1 Depois de atualizar para uma versão do SQL Server que dá suporte à eliminação de segmento mínima/máxima da cadeia de caracteres (SQL Server 2022 (16.x) e posterior), min_deep_data e max_deep_data será NULL até depois que o índice columnstore for recriado, usando um REBUILD ou DROP/CREATE. Após uma recompilação, os segmentos que contêm tipos de dados que podem se beneficiar da eliminação mínima/máxima do segmento de cadeia de caracteres conterão dados.

Comentários

O tipo de codificação de segmento columnstore é selecionado pelo Mecanismo de Banco de Dados com o objetivo de atingir o menor custo de armazenamento, analisando os dados do segmento. Se os dados forem principalmente distintos, o Mecanismo de Banco de Dados usará a codificação baseada em valor. Se os dados não forem distintos, o Mecanismo de Banco de Dados usará a codificação baseada em hash. A escolha entre codificação baseada em cadeia de caracteres e baseada em valor está relacionada ao tipo de dados que está sendo armazenado, seja dados de cadeia de caracteres ou dados binários. Todas as codificações aproveitam o empacotamento de bits e a codificação de comprimento de execução quando possível.

A eliminação do segmento Columnstore aplica-se a tipos de dados numéricos, de data e hora e ao tipo de dados datetimeoffset com escala menor ou igual a dois. Do SQL Server 2022 (16.x) em diante, os recursos de eliminação de segmento se estendem a tipos de dados de cadeia de caracteres, binários, GUID e o tipo de dados datetimeoffset para escala maior que dois. A eliminação de segmento não se aplica a tipos de dados LOB, como os comprimentos (máximo) do tipo de dados.

Permissões

Todas as colunas exigem pelo menos VIEW DEFINITION permissão na tabela. As colunas a seguir retornam NULL , a menos que o usuário também tenha SELECT permissão: has_nulls, base_id, magnitude, min_data_id, , max_data_ide null_value.

A visibilidade dos metadados em exibições do catálogo está limitada aos protegíveis que pertencem a um usuário ou para os quais o usuário recebeu permissão. Para obter mais informações, consulte Metadata Visibility Configuration.

Exemplos

A consulta a seguir retorna informações sobre segmentos de um índice columnstore.

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óximas etapas