Domanda

Una delle nuove funzionalità di SQL Server 2012 Denali nome in codice è il columnstore indice.

so un bel po 'su regolari indici fila-store vecchio, come la struttura b-albero, le differenze di stoccaggio tra il livello foglia e le pagine b-albero, colpisce di campi inclusi, ottimizzando di usarli, ordine delle chiavi, ecc.

Sto avendo difficoltà a ottenere qualsiasi informazione bene sulla interni di un indice columnstore.

  • Come è strutturato?
  • C'è un b-albero? Qualche altra struttura a posto?
  • Come sono organizzati i dati?
  • Che tipo di operatori specifici sono più adatti per usarlo?
  • Qualsiasi altro anti-pattern da evitare durante il loro uso?

Un sacco di quello che posso trovare su di loro sono fondamentalmente l'esatto opposto di un indice di "normale", cioè nessun ordinamento delle chiavi, i campi non inclusi, non cluster SOLO.

Tutte le comprensioni sono apprezzati.

È stato utile?

Soluzione

Columnstore Struttura

I dati Columnstore sono fisicamente memorizzati in uno o più segmenti (regolare LOB unità di allocazione) per colonna e possono anche essere partizionato in modo usuale. Ogni segmento contiene circa un milione di righe di valori altamente compressi o riferimenti di valore (diverse tecniche di compressione sono disponibili). Un link di riferimento valore di una voce in uno dei due fino a dizionari hash .

I dizionari sono Pinned in memoria durante l'esecuzione di query, con ID valore dati del segmento essendo visto nel dizionario ogniqualvolta esecuzione richiede il valore dei dati effettivi (questa ricerca viene differito il più a lungo possibile per motivi di prestazioni).

Segmenti hanno anche un record di intestazione contenente metadati quali i valori massimi memorizzati nel segmento minimo e. Informazioni fornite dalla intestazione può essere spesso utilizzato per eliminare partizioni complete da lavorazione al momento dell'esecuzione. registrare le informazioni di intestazione è memorizzato nella consueta struttura radice dati LOB, eliminando così un mezzo segmento motore di archiviazione può saltare leggendo le pagine di dati LOB dalla memoria fisica del tutto. Massimizzare il potenziale per l'eliminazione può richiedere attenta progettazione , tra cui un la dipendenza sull'ordine indice cluster al momento l'indice Columnstore è costruito.

specifico Piano Operatori

SQL Server 2012 introduce una nuova modalità di esecuzione chiamato modalità batch. In questo modo, i pacchetti di circa 1000 righe vengono passati tra operatori, migliorando notevolmente l'efficienza di utilizzo del processore. All'interno di ogni pacchetto di dati colonnare è rappresentato come un vettore. Non tutti gli operatori di piano supportano il funzionamento in modalità batch, ma esempi di quelli che lo fanno sono Columnstore Index Scan, Hash INNER JOIN, Batch Hash Table del torso Filtro Bitmap, Hash Aggregate (non scalare aggregati), filtro e Compute Scalar (per proiezione e valutazione espressione). Query piani di esecuzione sono stati migliorati per mostrare la modalità di esecuzione stimato e reale.

anti-pattern

Ci sono un gran numero di restrizioni nella prima versione, tra cui vincoli ammissibile tipi di dati . Sono supportati la maggior parte dei tipi comuni; I tipi di dati non supportati includono DECIMAL con una maggiore precisione di 18 cifre, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, tipi CLR e (VAR)BINARY.

L'utilizzo di tipi , OUTER JOIN , IN, EXISTS , NOT IN , OR , UNION ALL può causare ridotto significativamente le prestazioni (Row esecuzione Mode), salvo soluzioni sono impiegati che tipicamente coinvolgono insoliti riscrive sintassi come indicato negli articoli collegati in questa sezione .

Ulteriori informazioni

Remo Rusanu ha bloggato una grande rassegna qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top