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 grupo de linhas. 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 string/binário sem dicionário (semelhante a 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 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 a codificação do tipo 1 não estiver sendo usada, base_id será definida como -1.
magnitude float Magnitude se a codificação do tipo 1 estiver sendo usada. Se a codificação do tipo 1 não estiver sendo usada, a magnitude será definida como -1.
primary_dictionary_id int Um valor de 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ínimo 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 ao SQL Server 2022 (16.x) e posterior.
Agrupamento atual quando o segmento foi criado. Mapeia para uma ID interna. Atualmente apenas interno e não para desenvolvimento.
min_deep_data varbinário(18) Aplica-se ao SQL Server 2022 (16.x) e posterior.
Usado para eliminação de segmentos. 1 Apenas para uso interno.
max_deep_data varbinário(18) Aplica-se ao SQL Server 2022 (16.x) e posterior.
Usado para eliminação de segmentos. 1 Apenas para uso interno.

1 Depois de atualizar para uma versão do SQL Server que dá suporte à eliminação de segmentos mínimos/máximos de cadeia de caracteres (SQL Server 2022 (16.x) e posterior) min_deep_data e max_deep_data será NULL até que o índice columnstore seja recriado, usando um REBUILD ou DROP/CREATE. Após uma reconstrução, os segmentos que contêm tipos de dados que podem se beneficiar da eliminação de segmentos mínimo/máximo da 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 obter o menor custo de armazenamento, analisando os dados do segmento. Se os dados forem quase todos distintos, o Mecanismo de Banco de Dados usará a codificação baseada em valor. Se a maioria dos dados não for distinta, 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ão sendo armazenados, sejam 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 de segmento columnstore se aplica 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 segmentos não se aplica a tipos de dados LOB, como os comprimentos de tipo de dados (máximos).

Permissões

Todas as colunas exigem pelo menos VIEW DEFINITION permissão na tabela. As seguintes colunas retornamNULL, a menos que o usuário também tenha SELECT permissão: has_nulls, base_id, magnitudemin_data_id, max_data_id, e 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