Batch Mode na Rowstore – ewolucja zapytań

2025-11-01 · 2 min

SQL Server 2022 przyniósł rewolucję: Batch Mode on Rowstore.
Zamiast przetwarzać każdy wiersz osobno, silnik potrafi działać grupowo – jak procesor SIMD w świecie danych.
To ewolucja w stronę analitycznej wydajności, bez potrzeby kolumnowych indeksów.

🔍 Zajrzyj w DMV

1
2
3
4
5
-- sprawdź, które zapytania wykorzystują Batch Mode
SELECT * FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE qp.query_plan.value('declare namespace p="http://schemas.microsoft.com/sqlserver/2004/07/showplan"; 
                           //p:RelOp/@Parallel', 'varchar(5)') IS NOT NULL;

⚙️ Jak to działa

Batch Mode przetwarza dane w blokach (batchach) po kilkaset wierszy zamiast rekord po rekordzie.
Każdy operator (np. agregacja, sortowanie, join) korzysta z tego samego bloku danych, dzięki czemu redukuje narzut CPU i zwiększa przepustowość.
To jak różnica między przenoszeniem cegieł po jednej a całymi paletami.

Silnik decyduje automatycznie, czy Batch Mode przyniesie korzyść — nie trzeba mieć indeksów kolumnowych ani specjalnych opcji.
Wystarczy, że zapytanie ma charakter analityczny, a dane są wystarczająco duże, by opłacało się działać „hurtowo”.

🧠 Eksperymentuj

Można wymusić Batch Mode nawet w zapytaniach typowo OLTP, by porównać efekty:

1
2
3
SELECT TOP 1000 *
FROM Sales.SalesOrderDetail
OPTION (USE HINT('ENABLE_BATCH_MODE'));

Porównaj plan wykonania z i bez tego hintu.
Zwróć uwagę na różnicę w liczbie operatorów Batch vs Row, czas CPU i ilość odczytanych stron logicznych.

„Ewolucja to sztuka wykorzystania starych narzędzi w nowy sposób.” — SQLManiak


🧩 Notatka SQLManiaka

Batch Mode on Rowstore to nie trik — to zapowiedź kierunku, w którym zmierza silnik SQL Server:
inteligentna adaptacja bez zmiany modelu danych. Uczy się działać analitycznie, nawet w świecie transakcyjnym.
To właśnie definicja ewolucji – przystosowanie, nie rewolucja.


Tagi: SQLServer , BatchMode , Rowstore , QueryProcessor , Performance

Marcin Pytlik
LinkedIn · GitHub

Marcin Pytlik

LinkedIn · GitHub