Condividi tramite


sys.column_store_row_groups (Transact-SQL)

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Istanza gestitaDatabase SQL in Microsoft Fabric

Fornisce informazioni sull'indice columnstore per segmento.

Per gli indici columnstore cluster, sys.column_store_row_groups include una colonna per il numero totale di righe archiviate fisicamente (incluse quelle contrassegnate come eliminate) e una colonna per il numero di righe contrassegnate come eliminate. Utilizzare sys.column_store_row_groups per determinare quali gruppi di righe hanno una percentuale elevata di righe eliminate e devono essere ricompilati.

Nome colonna Tipo di dati Descrizione
object_id int ID della tabella in cui è definito questo indice.
index_id int ID dell'indice columnstore.
partition_number int Partizione di tabella che contiene il gruppo di righe identificato da row_group_id. Usare partition_number per aggiungere sys.partitions.
row_group_id int Numero del gruppo di righe associato a questo gruppo di righe. Questo numero è univoco all'interno della partizione.

-1 = coda di una tabella ottimizzata per la memoria.
delta_store_hobt_id bigint Oggetto hobt_id per un OPEN gruppo di righe nell'archivio differenziale.

NULL se il gruppo di righe non si trova nell'archivio differenziale.

NULL per la parte finale di una tabella ottimizzata per la memoria.
state tinyint Numero che descrive lo stato del gruppo di righe.

0 = INVISIBLE

1 = OPEN

2 = CLOSED

3 = COMPRESSED

4 = TOMBSTONE
state_description nvarchar(60) Descrizione dello stato del gruppo di righe:

INVISIBLE - Segmento compresso nascosto durante il processo di compilazione dei dati in un archivio differenziale. Le azioni di lettura usano l'archivio differenziale fino al completamento del segmento compresso invisibile. Successivamente, il nuovo segmento diventa visibile e l'archivio delta di origine viene rimosso.

OPEN - Gruppo di righe di lettura/scrittura che accetta nuove righe. Un gruppo di righe aperto è ancora in formato rowstore e non è compresso in formato columnstore.

CLOSED - Gruppo di righe riempito, ma non ancora compresso dal processo di spostamento delle tuple.

COMPRESSED - Gruppo di righe riempito e compresso.
total_rows bigint Righe totali archiviate fisicamente nel gruppo di righe. Le righe eliminate potrebbero essere ancora archiviate. Il numero massimo di righe in un gruppo di righe è 1.048.576.
deleted_rows bigint Righe totali nel gruppo di righe contrassegnate come eliminate ma rimangono archiviate. Questo valore è sempre 0 per i gruppi di righe differenziali.

Per gli indici columnstore non cluster, questo valore non include le righe eliminate archiviate nel buffer di eliminazione. Per altre informazioni e per trovare il numero di righe eliminate nel buffer di eliminazione, vedere sys.internal_partitions.
size_in_bytes bigint Dimensioni in byte di tutti i dati in questo gruppo di righe (non inclusi i metadati o i dizionari condivisi), sia per l'archivio differenziale che per i rowgroup columnstore.

Osservazioni:

Restituisce una riga per ogni gruppo di righe columnstore per ogni partizione di ogni tabella con un indice columnstore cluster o non cluster.

Usare sys.column_store_row_groups per individuare il numero di righe nel gruppo di righe e le dimensioni del gruppo di righe.

Quando il numero delle righe eliminate in un gruppo di righe diventa una percentuale elevata delle righe totali, la tabella diventa meno efficiente. Ricompilare l'indice columnstore per ridurre le dimensioni della tabella, riducendo le operazioni di I/O del disco necessarie per leggere la tabella. Per ricompilare l'indice columnstore, usare la REBUILD clausola dell'istruzione ALTER INDEX .

Il columnstore aggiornabile inserisce innanzitutto nuovi dati in un rowgroup aperto, che è in formato rowstore, ed è anche detto anche tabella differenziale. Quando un rowgroup aperto è pieno, il relativo stato diventa CLOSED. Un rowgroup chiuso viene compresso in formato columnstore dal mover della tupla e lo stato cambia in COMPRESSED. Il processo tuple-mover è un processo in background che si riattiva periodicamente per verificare se esistano gruppi di righe chiusi pronti per essere compressi in un gruppo di righe columnstore. Lo spostamento della tupla dealloca anche tutti i rowgroup in cui ogni riga viene eliminata. I rowgroup deallocati vengono contrassegnati come TOMBSTONE. Per eseguire immediatamente lo spostamento della tupla, usare la REORGANIZE clausola dell'istruzione ALTER INDEX .

Quando un gruppo di righe columnstore si riempie, viene compresso e smette di accettare nuove righe. Quando si eliminano righe da un gruppo compresso, rimangono ma vengono contrassegnate come eliminate. Gli aggiornamenti a un gruppo compresso vengono implementati come un'eliminazione dal gruppo compresso e come un inserimento in un gruppo aperto.

Autorizzazioni

Restituisce informazioni per una tabella se l'utente dispone VIEW DEFINITION dell'autorizzazione per la tabella.

La visibilità dei metadati nelle viste del catalogo è limitata alle entità a protezione diretta di cui l'utente è proprietario o per le quali dispone di autorizzazioni. Per altre informazioni, vedere Configurazione della visibilità dei metadati.

Esempi

L'esempio seguente unisce la sys.column_store_row_groups vista e altre viste di sistema per restituire informazioni sugli indici columnstore cluster. La percent_full colonna è una stima dell'efficienza del gruppo di righe.

SELECT i.object_id,
       OBJECT_SCHEMA_NAME(i.object_id) AS schema_name,
       OBJECT_NAME(i.object_id) AS table_name,
       i.name AS index_name,
       i.type_desc AS index_type_desc,
       rg.partition_number,
       rg.row_group_id,
       rg.state_description,
       rg.total_rows,
       rg.deleted_rows,
       rg.size_in_bytes,
       100 * (rg.total_rows - ISNULL(rg.deleted_rows, 0)) / total_rows AS percent_full
FROM sys.indexes AS i
     INNER JOIN sys.column_store_row_groups AS rg
         ON i.object_id = rg.object_id
        AND i.index_id = rg.index_id
WHERE INDEXPROPERTY(i.object_id, i.name, 'IsClustered') = 1
ORDER BY schema_name, table_name, index_name, row_group_id;

Per altre informazioni, vedere Controllare la frammentazione di un indice columnstore.