Jaka jest anatomia indeksu magazynu kolumn?

20

Jedną z nowych funkcji programu SQL Server 2012 o nazwie kodowej Denalijest 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.

JNK
źródło
Na stronie wikipedia jest sporo fanoutów dotyczących technicznych wdrożeń baz danych w sklepach kolumnowych. Wyobrażam sobie, że indeks to tylko struktura danych magazynu kolumn dla pojedynczej kolumny wraz z jej kluczami. Może używa indeksu bitmap, może BTree.
ConcernedOfTunbridgeWells
W rzeczywistości dotyczy wielu kolumn. Zakładam też, że podobnie jak w przypadku innych implementacji SS, będzie trochę inaczej niż w przypadku innych produktów
JNK
Dotyczy MySQL, ale to samo dotyczy: developer.bazaarvoice.com/why-columns-are-cool Również Sybase IQ jest wielkim tatusiem
gbn
3
@ConcernedOfTunbridgeWells - Czy indeksy magazynu kolumn używają indeksów bitmapowych? Nie. Indeksy magazynu kolumn wykorzystują zastrzeżoną reprezentację danych opartą na Vertipaq. To nie to samo co indeks bitmapowy i nie używa go. Ma jednak pewne zalety podobne do indeksów bitmapowych, takie jak skrócenie czasu filtrowania kolumny o małej liczbie odrębnych wartości.
Martin Smith
1
Remus Rusanu, członek zespołu Microsoft, który opracował tę funkcję, właśnie opublikował artykuł na ten temat: Indeksy COLUMNSTORE w SQL Server 2012
Nick Chammas

Odpowiedzi:

22

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 DECIMALz 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 ALLmogą 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 .

Paul White
źródło