sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)

Aplica-se a: SQL Server 2016 (13.x) e posterior Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Fornece informações atuais no nível do rowgroup sobre todos os índices columnstore no banco de dados atual.

Isso estende a exibição de catálogo sys.column_store_row_groups (Transact-SQL).

Nome da coluna Tipo de dados Descrição
object_id int ID da tabela subjacente.
index_id int ID desse índice columnstore em object_id tabela.
partition_number int ID da partição da tabela que contém row_group_id. Você pode usar o partition_number para adicionar esse DMV a sys.partitions.
row_group_id int ID desse grupo de linhas. Para tabelas particionadas, o valor é exclusivo dentro da partição.

-1 para uma cauda na memória.
delta_store_hobt_id bigint O hobt_id para um grupo de linhas no repositório delta.

NULL se o grupo de linhas não estiver no repositório delta.

NULL para a cauda de uma tabela na memória.
state tinyint Número de identificação associado state_description.

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = LÁPIDE

COMPRESSED é o único estado que se aplica a tabelas na memória.
state_desc nvarchar(60) Descrição do estado do grupo de linhas:

0 - INVISÍVEL - Um grupo de linhas que está sendo construído. Por exemplo:
Um grupo de linhas no columnstore é INVISIBLE enquanto os dados estão sendo compactados. Quando a compactação é concluída, uma opção de metadados altera o estado do grupo de linhas columnstore de INVISIBLE para COMPRESSED e o estado do grupo de linhas deltastore de CLOSED para TOMBSTONE.

1 - OPEN - Um grupo de linhas deltastore que está aceitando novas linhas. Um grupo de linhas aberto ainda está no formato rowstore e não foi compactado para o formato columnstore.

2 - CLOSED - Um grupo de linhas no repositório delta que contém o número máximo de linhas e está aguardando o processo de movimentação de tupla compactá-lo no columnstore.

3 - COMPRESSED - Um grupo de linhas compactado com compactação columnstore e armazenado no columnstore.

4 - TOMBSTONE - Um grupo de linhas que estava anteriormente no deltastore e não é mais usado.
total_rows bigint Número de linhas armazenadas fisicamente no grupo de linhas. Para grupos de linhas compactados. Inclui as linhas marcadas como excluídas.
deleted_rows bigint Número de linhas fisicamente armazenadas em um grupo de linhas compactado que são marcadas para exclusão.

0 para grupos de linhas que estão no repositório Delta.
size_in_bytes bigint Tamanho combinado, em bytes, de todas as páginas neste grupo de linhas. Esse tamanho não inclui o tamanho necessário para armazenar metadados ou dicionários compartilhados.
trim_reason tinyint Motivo que disparou o grupo de linhas COMPRESSED para ter menos do que o número máximo de linhas.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION

1 - NO_TRIM

2 - CARGA BULKLOAD

3 - REORGANIZAÇÃO

4 - DICTIONARY_SIZE

5 - MEMORY_LIMITATION

6 - RESIDUAL_ROW_GROUP

7 - STATS_MISMATCH

8 - DERRAMAMENTO

9 - AUTO_MERGE
trim_reason_desc nvarchar(60) Descrição de trim_reason.

0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: Ocorreu ao atualizar da versão anterior do SQL Server.

1 - NO_TRIM: O grupo de linhas não foi cortado. O grupo de linhas foi compactado com o máximo de 1.048.576 linhas. O número de linhas poderia ser menor se um subconjunto de linhas fosse excluído depois que o grupo de linhas delta fosse fechado

2 - BULKLOAD: O tamanho do lote de carregamento em massa limitava o número de linhas.

3 - REORG: Compressão forçada como parte do comando REORG.

4 - DICTIONARY_SIZE: O tamanho do dicionário ficou muito grande para compactar todas as linhas juntas.

5 - MEMORY_LIMITATION: Não há memória disponível suficiente para compactar todas as linhas juntas.

6 - RESIDUAL_ROW_GROUP: Fechado como parte do último grupo de linhas com linhas < de 1 milhão durante a operação de criação de índice. Observação: uma compilação de partição com vários núcleos pode resultar em mais de um corte desse tipo.

7 - STATS_MISMATCH: somente para columnstore na tabela na memória. Se as estatísticas indicarem >incorretamente = 1 milhão de linhas qualificadas na cauda, mas encontrarmos menos, o rowgroup compactado terá < 1 milhão de linhas

8 - SPILLOVER: somente para columnstore na tabela na memória. Se a cauda tiver > 1 milhão de linhas qualificadas, as linhas restantes do último lote serão compactadas se a contagem estiver entre 100k e 1 milhão

9 - AUTO_MERGE: uma operação de mesclagem do Tuple Mover em execução em segundo plano consolidou um ou mais rowgroups nesse rowgroup.
transition_to_compressed_state tinyint Mostra como esse rowgroup foi movido do deltastore para um estado compactado no columnstore.

1- NOT_APPLICABLE

2 - INDEX_BUILD

3 - TUPLE_MOVER

4 - REORG_NORMAL

5 - REORG_FORCED

6 - CARGA BULKLOAD

7 - MESCLAR
transition_to_compressed_state_desc nvarchar(60) 1 - NOT_APPLICABLE - A operação não se aplica ao deltastore. Ou o rowgroup foi compactado antes da atualização para o SQL Server 2016 (13.x), caso em que o histórico não é preservado.

2 - INDEX_BUILD - Uma criação de índice ou recompilação de índice compactou o rowgroup.

3 - TUPLE_MOVER - O movimentador de tupla em execução em segundo plano compactou o rowgroup. O movimento de tupla ocorre depois que o rowgroup muda de estado de OPEN para CLOSED.

4 - REORG_NORMAL - A operação de reorganização, ALTER INDEX ... REORG, moveu o rowgroup CLOSED do deltastore para o columnstore. Isso ocorreu antes que o motor de tupla tivesse tempo de mover o rowgroup.

5 - REORG_FORCED - Este rowgroup estava aberto no deltastore e foi forçado a entrar no columnstore antes de ter um número completo de linhas.

6 - BULKLOAD - Uma operação de carregamento em massa compactou o rowgroup diretamente sem usar o deltastore.

7 - MERGE - Uma operação de mesclagem consolidou um ou mais rowgroups nesse rowgroup e, em seguida, executou a compactação columnstore.
has_vertipaq_optimization bit A otimização do VertiPaq melhora a compactação columnstore reorganizando a ordem das linhas no rowgroup para obter uma compactação mais alta. Essa otimização ocorre automaticamente na maioria dos casos. Há dois casos em que a otimização VertiPaq não é usada:
a. quando um rowgroup delta se move para o columnstore e há um ou mais índices não clusterizados no índice columnstore - nesse caso, a otimização VertiPaq é ignorada para minimizar as alterações no índice de mapeamento;
b. para índices columnstore em tabelas com otimização de memória.

0 = Não

1 = Sim
geração BIGINT Geração de grupo de linhas associada a esse grupo de linhas.
created_time datetime2 Hora do relógio para quando esse rowgroup foi criado.

NULL - para um índice columnstore em uma tabela na memória.
closed_time datetime2 Hora do relógio para quando este rowgroup foi fechado.

NULL - para um índice columnstore em uma tabela na memória.

Resultados

Retorna uma linha para cada rowgroup no banco de dados atual.

Permissões

Requer CONTROL permissão na tabela e VIEW DATABASE STATE permissão no banco de dados.

Permissões do SQL Server 2022 e posteriores

Requer a permissão VIEW DATABASE PERFORMANCE STATE no banco de dados.

Exemplos

R. Calcule a fragmentação para decidir quando reorganizar ou recompilar um índice columnstore.

Para índices columnstore, a porcentagem de linhas excluídas é uma boa medida para a fragmentação em um rowgroup. Quando a fragmentação for de 20% ou mais, remova as linhas excluídas. Para obter mais exemplos, consulte Reorganizar e recompilar índices.

Este exemplo une sys.dm_db_column_store_row_group_physical_stats com outras tabelas do sistema e, em seguida, calcula a Fragmentation coluna como uma estimativa da eficiência de cada grupo de linhas no banco de dados atual. Para encontrar informações em uma única tabela, remova os hífens de comentário na frente da cláusula WHERE e forneça um nome de tabela.

SELECT i.object_id,   
    object_name(i.object_id) AS TableName,   
    i.name AS IndexName,   
    i.index_id,   
    i.type_desc,   
    CSRowGroups.*,  
    100*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0) AS 'Fragmentation'
FROM sys.indexes AS i  
JOIN sys.dm_db_column_store_row_group_physical_stats AS CSRowGroups  
    ON i.object_id = CSRowGroups.object_id AND i.index_id = CSRowGroups.index_id   
-- WHERE object_name(i.object_id) = 'table_name'   
ORDER BY object_name(i.object_id), i.name, row_group_id;  

Confira também

Exibições do catálogo de objeto (Transact-SQL)
Exibições do Catálogo (Transact-SQL)
Arquitetura de índices columnstore
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)
sys.column_store_dictionaries (Transact-SQL)
sys.column_store_segments (Transact-SQL)