Co dokładnie SQL Server 2014 może wykonywać w trybie wsadowym?


21

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):

wprowadź opis zdjęcia tutaj

(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?


5
Dlaczego SQL Server nie używa również trybu wsadowego do zapytań tylko do magazynu? Ponieważ CS obsługuje obecnie tylko tryb wsadowy. 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? Tak CS jest wymagany. Wciąż aktywny jest element Connect Implementowanie trybu wsadowego dla Row Store otwartego przez Neugebauer.
Kin Shah,

2
W 2016 roku pojawiła się nowa możliwa sztuczka, aby tryb wsadowy został uznany za BTW sqlmag.com/sql-server/...
Martin Smith

Odpowiedzi:


30

Co dokładnie można uruchomić w trybie wsadowym od wersji SQL Server 2014?

SQL Server 2014 dodaje następujące elementy do oryginalnej listy operatorów w trybie wsadowym:

  • Łączenie zewnętrzne mieszania (w tym łączenie pełne)
  • Hash Semi Join
  • Hash Anti Semi Join
  • Union All (tylko konkatenacja)
  • Skalarne sumowanie skrótów (bez grupowania według)
  • Usunięto kompilację tabeli zbiorczej

Wygląda na to, że dane mogą przejść do trybu wsadowego, nawet jeśli nie pochodzą z indeksu magazynu kolumn.

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:

Adaptery Row to Batch to Row

Czy używanie indeksu magazynu kolumn jest formalnym wymogiem niezbędnym do tego, aby SQL Server rozważał tryb wsadowy?

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.

Czy możemy dodać zerowy wiersz tabeli zastępczej z indeksem magazynu kolumn, aby wywołać tryb wsadowy?

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.

-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*) 
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;

Planuj ze złączem zewnętrznym lewy manekin:

Tryb wsadowy ze stołem zastępczym

Dokumentacja jest cienka

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.