sys.column_store_segments (Transact-SQL)

Aplica-se a: SQL Server 2012 (11.x) e posterior Instância Gerenciada 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 grupos de linhas 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 grupo de linhas. Para compatibilidade com versões anteriores, o nome da coluna continua a ser chamado segment_id mesmo que essa seja a ID do grupo de linhas. 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 utilizada 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 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 grupo de linhas). 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áximo 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.
Utilizado 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.
Utilizado para eliminação de segmentos. 1 Apenas para uso interno.

1 Depois de atualizar para uma versão do SQL Server que ofereça suporte à eliminação de segmento min/max de 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 reconstrução, os segmentos que contêm tipos de dados que podem se beneficiar da eliminação do segmento min/max 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 principalmente distintos, o Mecanismo de Banco de Dados usará codificação baseada em valor. Se os dados não forem mais distintos, o Mecanismo de Banco de Dados usará 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 do segmento columnstore aplica-se aos 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 de tipo de dados (máximo).

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 de catálogo é limitada a protegíveis que um usuário possui ou nos quais o usuário recebeu alguma 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