sys.dm_db_column_store_row_group_physical_stats (Transact-SQL)
Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di Azure Istanza gestita di SQL di Azure
Fornisce informazioni correnti a livello di rowgroup su tutti gli indici columnstore nel database corrente.
Estende la vista del catalogo sys.column_store_row_groups (Transact-SQL).
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
object_id | int | ID della tabella sottostante. |
index_id | int | ID di questo indice columnstore nella tabella object_id . |
partition_number | int | ID della partizione di tabella che contiene row_group_id. È possibile utilizzare il partition_number per creare un join di questa DMV a sys.partitions. |
row_group_id | int | ID del gruppo di righe. Per le tabelle partizionate, il valore è univoco all'interno della partizione. -1 per una coda in memoria. |
delta_store_hobt_id | bigint | Il hobt_id per un 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 in memoria. |
state | tinyint | Numero ID associato state_description. 0 = INVISIBLE 1 = OPEN 2 = CLOSED 3 = COMPRESSED 4 = TOMBSTONE COMPRESSED è l'unico stato applicabile alle tabelle in memoria. |
state_desc | nvarchar(60) | Descrizione dello stato del gruppo di righe: 0 - INVISIBLE - Gruppo di righe da compilare. Ad esempio: Un gruppo di righe nel columnstore è INVISIBLE mentre i dati vengono compressi. Al termine della compressione, un commutatore di metadati modifica lo stato del gruppo di righe columnstore da INVISIBLE a COMPRESSED e lo stato del gruppo di righe deltastore da CLOSED a TOMBSTONE. 1 - OPEN - Un gruppo di righe deltastore che accetta nuove righe. Un gruppo di righe aperto presenta ancora il formato rowstore e non è stato compresso nel formato columnstore. 2 - CLOSED - Un gruppo di righe nell'archivio differenziale che contiene il numero massimo di righe ed è in attesa del processo di spostamento delle tuple per comprimerlo nel columnstore. 3 - COMPRESSO - Gruppo di righe compresso con compressione columnstore e archiviato nel columnstore. 4 - TOMBSTONE - Gruppo di righe precedentemente presente nell'archivio differenziale e non più usato. |
total_rows | bigint | Righe di totali archiviate fisicamente nell'apposito gruppo. Per i gruppi di righe compressi. Include le righe contrassegnate come eliminate. |
deleted_rows | bigint | Numero di righe archiviate fisicamente in un gruppo di righe compresso contrassegnate per l'eliminazione. 0 per i gruppi di righe presenti nell'archivio differenziale. |
size_in_bytes | bigint | Dimensioni combinate, in byte, di tutte le pagine di questo gruppo di righe. Questa dimensione non include le dimensioni necessarie per archiviare i metadati o i dizionari condivisi. |
trim_reason | tinyint | Motivo per cui il gruppo di righe COMPRESSED ha attivato un numero inferiore al numero massimo di righe. 0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION 1 - NO_TRIM 2 - BULKLOAD 3 - REORG 4 - DICTIONARY_SIZE 5 - MEMORY_LIMITATION 6 - RESIDUAL_ROW_GROUP 7 - STATS_MISMATCH 8 - SPILLOVER 9 - AUTO_MERGE |
trim_reason_desc | nvarchar(60) | Descrizione del trim_reason. 0 - UNKNOWN_UPGRADED_FROM_PREVIOUS_VERSION: si è verificato durante l'aggiornamento dalla versione precedente di SQL Server. 1 - NO_TRIM: il gruppo di righe non è stato tagliato. Il gruppo di righe è stato compresso con il numero massimo di 1.048.576 righe. Il numero di righe potrebbe essere minore se un subset di righe è stato eliminato dopo la chiusura del rowgroup differenziale 2 - BULKLOAD: le dimensioni del batch di caricamento bulk limitano il numero di righe. 3 - REORG: Compressione forzata come parte del comando REORG. 4 - DICTIONARY_SIZE: le dimensioni del dizionario sono aumentate troppo grandi per comprimere tutte le righe insieme. 5 - MEMORY_LIMITATION: memoria disponibile insufficiente per comprimere tutte le righe insieme. 6 - RESIDUAL_ROW_GROUP: chiuso come parte dell'ultimo gruppo di righe con righe < 1 milione durante l'operazione di compilazione dell'indice. Nota: una compilazione di partizione con più core può comportare più di un taglio di questo tipo. 7 - STATS_MISMATCH: solo per columnstore nella tabella in memoria. Se le statistiche indicate >in modo non corretto = 1 milione di righe qualificate nella parte finale, ma è stato rilevato un minor numero di righe, il rowgroup compresso avrà < 1 milione di righe 8 - SPILLOVER: solo per columnstore nella tabella in memoria. Se tail ha > 1 milione di righe qualificate, l'ultimo batch rimanente righe viene compresso se il conteggio è compreso tra 100.000 e 1 milione 9 - AUTO_MERGE: un'operazione di unione di Tuple Mover eseguita in background ha consolidato uno o più rowgroup in questo rowgroup. |
transition_to_compressed_state | tinyint | Mostra come questo rowgroup è stato spostato dall'archivio differenziale a uno stato compresso nel columnstore. 1- NOT_APPLICABLE 2 - INDEX_BUILD 3 - TUPLE_MOVER 4 - REORG_NORMAL 5 - REORG_FORCED 6 - BULKLOAD 7 - MERGE |
transition_to_compressed_state_desc | nvarchar(60) | 1 - NOT_APPLICABLE - l'operazione non si applica al deltastore. In alternativa, il rowgroup è stato compresso prima dell'aggiornamento a SQL Server 2016 (13.x), nel qual caso la cronologia non viene mantenuta. 2 - INDEX_BUILD - Creazione di un indice o ricompilazione dell'indice compresso per il rowgroup. 3 - TUPLE_MOVER - Lo spostamento della tupla in esecuzione in background comprimeva il rowgroup. Lo spostamento tuple si verifica dopo che il rowgroup cambia lo stato da OPEN a CLOSED. 4 - REORG_NORMAL - Operazione di riorganizzazione, ALTER INDEX ... REORG, spostato il rowgroup CLOSED dal deltastore al columnstore. Questo problema si è verificato prima che il tuple-mover avesse tempo per spostare il rowgroup. 5 - REORG_FORCED - Questo rowgroup è stato aperto nel deltastore ed è stato forzato nel columnstore prima di avere un numero completo di righe. 6 - BULKLOAD : un'operazione di caricamento bulk ha compresso il rowgroup direttamente senza usare il deltastore. 7 - MERGE - Operazione di merge consolidata uno o più rowgroup in questo rowgroup e quindi eseguita la compressione columnstore. |
has_vertipaq_optimization | bit | L'ottimizzazione vertiPaq migliora la compressione columnstore riorganizzando l'ordine delle righe nel rowgroup per ottenere una compressione più elevata. Questa ottimizzazione viene eseguita automaticamente nella maggior parte dei casi. Esistono due casi in cui l'ottimizzazione VertiPaq non viene usata: a. quando un rowgroup differenziale viene spostato nel columnstore e sono presenti uno o più indici non cluster nell'indice columnstore. In questo caso, l'ottimizzazione vertiPaq viene ignorata per ridurre al minimo le modifiche apportate all'indice di mapping; b. per gli indici columnstore nelle tabelle ottimizzate per la memoria. 0 = No 1 = Sì |
generazione | bigint | Generazione di gruppi di righe associata a questo gruppo di righe. |
created_time | datetime2 | Ora di clock per la creazione di questo rowgroup. NULL: per un indice columnstore in una tabella in memoria. |
closed_time | datetime2 | Ora di ora in cui questo rowgroup è stato chiuso. NULL: per un indice columnstore in una tabella in memoria. |
Risultati
Restituisce una riga per ogni rowgroup nel database corrente.
Autorizzazioni
È richiesta CONTROL
l'autorizzazione per la tabella e VIEW DATABASE STATE
l'autorizzazione per il database.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW DATABASE PERFORMANCE STATE per il database.
Esempi
R. Calcolare la frammentazione per decidere quando riorganizzare o ricompilare un indice columnstore.
Per gli indici columnstore, la percentuale di righe eliminate è una misura valida per la frammentazione in un rowgroup. Quando la frammentazione è pari o superiore al 20%, rimuovere le righe eliminate. Per altri esempi, vedere Riorganizzare e ricompilare gli indici.
Questo esempio unisce sys.dm_db_column_store_row_group_physical_stats con altre tabelle di sistema e quindi calcola la Fragmentation
colonna come stima dell'efficienza di ogni gruppo di righe nel database corrente. Per trovare informazioni su una singola tabella, rimuovere i trattini di commento davanti alla clausola WHERE e specificare un nome di tabella.
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;
Vedi anche
Viste del catalogo oggetti (Transact-SQL)
Viste del catalogo (Transact-SQL)
Architettura degli indici columnstore
Domande frequenti sull'esecuzione di query nel catalogo di sistema di 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)