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