Jedną z nowych funkcji programu SQL Server 2012 o nazwie kodowej Denali
jest indeks Columnstore.
Wiem dobrze o regularnych starych indeksach magazynu wierszy, takich jak struktura b-drzewa, różnice w przechowywaniu między poziomem liścia i stronami b-drzewa, wpływami zawartych pól, optymalizacją ich użycia, kolejnością kluczy itp.
Mam trudności z uzyskaniem jakichkolwiek dobrych informacji na temat wewnętrznych elementów indeksu magazynu kolumn.
- Jak to jest zbudowane?
- Czy jest b-drzewo? Jakaś inna struktura na miejscu?
- Jak zorganizowane są dane?
- Jakie rodzaje operatorów najlepiej nadają się do korzystania z niego?
- Jakieś inne anty-wzory, których należy unikać podczas ich używania?
Wiele z tego, co mogę się o nich dowiedzieć, to w zasadzie dokładne przeciwieństwo „normalnego” indeksu, tj. Brak uporządkowania kluczy, żadnych dołączonych pól, TYLKO nieklastrowane.
Wszelkie spostrzeżenia są mile widziane.
Odpowiedzi:
Struktura magazynu kolumn
Dane magazynu kolumn są fizycznie przechowywane w co najmniej jednym segmencie (zwykłe jednostki alokacji LOB) na kolumnę i mogą być również dzielone w zwykły sposób. Każdy segment zawiera około miliona wierszy wysoce skompresowanych wartości lub odniesień do wartości (dostępnych jest kilka technik kompresji). Odwołanie do wartości prowadzi do pozycji w jednym z maksymalnie dwóch słowników mieszających .
Słowniki są przypinane do pamięci podczas wykonywania zapytania, a identyfikatory wartości danych z segmentu są wyszukiwane w słowniku, ilekroć wykonanie wymaga rzeczywistej wartości danych (to wyszukiwanie jest odraczane na tak długo, jak to możliwe ze względu na wydajność).
Segmenty mają również rekord nagłówka zawierający metadane, takie jak minimalne i maksymalne wartości przechowywane w segmencie. Informacje z nagłówka można często wykorzystać do wyeliminowania przetwarzania kompletnych partycji w czasie wykonywania. Informacje o rekordzie nagłówka są przechowywane w zwykłej strukturze katalogu głównego danych LOB, więc wyeliminowanie segmentu oznacza, że silnik pamięci może całkowicie pominąć czytanie stron danych LOB z pamięci fizycznej. Maksymalizacja potencjału eliminacji może wymagać starannego zaprojektowania , w tym zależności od kolejności indeksów klastrowych w chwili budowania indeksu magazynu kolumn.
Operatorzy określonych planów
SQL Server 2012 wprowadza nowy tryb wykonywania o nazwie Tryb wsadowy. W tym trybie między operatorami przesyłane są pakiety o wielkości około 1000 wierszy, co znacznie poprawia efektywność wykorzystania procesora. W każdym pakiecie dane kolumnowe są reprezentowane jako wektor. Nie wszyscy operatorzy planu obsługują tryb wsadowy, ale przykłady takich, które obejmują skanowanie indeksu magazynu kolumn, łączenie wewnętrzne mieszania, kompilację tabeli mieszania wsadowego, filtr bitmapowy, agregację mieszania (nie agregatów skalarnych ), filtr i skalowanie obliczeniowe (do projekcji i wyrażania ocena). Plany wykonania zapytań zostały ulepszone, aby pokazać szacowany i rzeczywisty tryb wykonywania.
Anty-Wzory
Pierwsza wersja zawiera wiele ograniczeń, w tym ograniczenia dotyczące dopuszczalnych typów danych . Obsługiwane są najpopularniejsze typy; nieobsługiwane typy danych to
DECIMAL
z dokładnością większą niż 18 cyfr,(N)VARCHAR(MAX)
,UNIQUEIDENTIFIER
, typy CLR i(VAR)BINARY
.Zastosowanie typów łańcuchowych ,
OUTER JOIN
,IN
,EXISTS
,NOT IN
,OR
,UNION ALL
mogą powodować znaczące zmniejszenie wydajności (rząd wykonania tryb), o ile nie stosuje się ich rozwiązania, które zazwyczaj obejmują niecodzienne przepisuje składniowych, jak pokazano w połączonych artykułów w tej sekcji.Więcej informacji
Remus Ruşanu blogu wielki przegląd tutaj .
źródło