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
, magnitude
min_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
- Exibições do catálogo de objeto (Transact-SQL)
- Exibições do Catálogo (Transact-SQL)
- Consultando as perguntas frequentes do catálogo do sistema do SQL Server
- sys.columns (Transact-SQL)
- sys.all_columns (Transact-SQL)
- sys.computed_columns (Transact-SQL)
- Guia de Índices columnstore
- sys.column_store_dictionaries (Transact-SQL)