Gdy w zapytaniu używany jest indeks magazynu kolumn, SQL Server może korzystać z trybu wsadowego. Dokumentacja jest cienka na temat tego, co może działać w trybie wsadowym, a co nie. Proszę spojrzeć na następujący (motywujący) plan zapytań, w którym zaskakująca liczba rzeczy jest wykonywana w trybie wsadowym (zielony):
(Jest to plan szacunkowy. Użyłem rzeczywistego planu, aby sprawdzić, czy rzeczywisty tryb wykonania jest rzeczywiście wsadowy).
Zauważ, że tylko strona kompilacji T1 używa indeksu magazynu kolumn. Wszystkie wejścia sondy (T2 i T3) są magazynami rzędów. Wydaje się, że ich dane przechodzą w tryb wsadowy. Zawsze myślałem, że tryb wsadowy jest używany dla strumienia danych, który biegnie tylko po stronie sondy.
Wygląda na to, że dane mogą przejść do trybu wsadowego, nawet jeśli nie pochodzą z indeksu magazynu kolumn. To stawia pytanie: dlaczego SQL Server nie używa również trybu wsadowego do zapytań tylko do magazynu? Może być korzystne dla niektórych z nich. Czy używanie indeksu magazynu kolumn jest formalnym wymogiem niezbędnym do tego, aby SQL Server rozważał tryb wsadowy? Czy możemy dodać zerowy wiersz tabeli zastępczej z indeksem magazynu kolumn, aby wywołać tryb wsadowy i uzyskać wzrost wydajności?
Co dokładnie można uruchomić w trybie wsadowym od wersji SQL Server 2014?
Odpowiedzi:
SQL Server 2014 dodaje następujące elementy do oryginalnej listy operatorów w trybie wsadowym:
SQL Server 2012 miał bardzo ograniczone wykorzystanie operatorów wsadowych. Plany w trybie wsadowym miały stały kształt, polegały na heurystyce i nie mogły ponownie uruchomić trybu wsadowego po dokonaniu przejścia do przetwarzania w trybie wierszowym.
SQL Server 2014 dodaje tryb wykonywania (wsadowy lub wierszowy) do ogólnej struktury właściwości optymalizatora zapytań, co oznacza, że może rozważyć przejście do trybu wsadowego i wychodzenie z niego w dowolnym punkcie planu. Przejścia są implementowane przez niewidoczne adaptery trybu wykonywania w planie. Z tymi adapterami związany jest koszt, aby ograniczyć liczbę przejść wprowadzanych podczas optymalizacji. Ten nowy model elastyczny jest znany jako tryb mieszany.
Adaptery trybu wykonywania można zobaczyć w danych wyjściowych optymalizatora (choć niestety nie w widocznych dla użytkownika planach wykonania) z nieudokumentowanym TF 8607. Na przykład, przechwycono następujące zapytanie dla zapytania zliczającego wiersze w magazynie wierszy:
Tak jest dzisiaj. Jednym z możliwych powodów tego ograniczenia jest to, że w naturalny sposób ogranicza przetwarzanie w trybie wsadowym do wersji Enterprise.
Tak, to działa. Widziałem także ludzi łączących się z jednym wierszem klastrowego indeksu magazynu kolumn właśnie z tego powodu. Sugestia, którą podałeś w komentarzach, aby pozostawić dołączenie do fałszywej tabeli magazynu kolumn na false, jest niesamowita.
Planuj ze złączem zewnętrznym lewy manekin:
Prawdziwe.
Najlepszymi oficjalnymi źródłami informacji są opisane indeksy magazynu kolumn i dostrajanie wydajności magazynu kolumn programu SQL Server .
SQL Server MVP Niko Neugebauer ma wspaniałą serię na columnstore w ogóle tutaj .
Istnieje kilka dobrych szczegółów technicznych na temat zmian w 2014 roku w dokumencie Microsoft Research pt. Ulepszenia magazynów kolumn SQL Server (pdf), chociaż nie jest to oficjalna dokumentacja produktu.
źródło