Blog: Utrzymanie it | Bazy danych | Ms sql

MS SQL Server 2019 – Intelligent Query Processing

MS SQL Server 2019 – Intelligent Query Processing
  • 1 234 views

Intelligent Query Processing nie jest całkowicie nową funkcjonalnością.

Udostępnij!

Stanowi rozwinięcie zaprezentowanej w MS SQL 2017 technologii o nazwie Adaptive Query Processing, która składa się z:

  • Batch mode memory grant feedback
  • Batch mode adaptive join
  • Interleaved execution

Te trzy funkcjonalności były wprowadzeniem do automatyzacji procesu optymalizacji zapytań. W zaprezentowanym rozwiązaniu:

  • Batch mode memory grant feedback – był długo oczekiwanym sposobem przekazania do Query Procesor zwrotnej informacji o realnym wykorzystaniu przydziału pamięci przez zapytanie, a więc optymalizacją przydziału pamięci, aby uniknąć jej marnowania lub konieczności wykorzystania TempDB gdy przydział pamięci był zbyt mały.
  • Batch mode adaptive join – umożliwił elastyczny dobór sposobu realizacji tego samego zapytania w zależności od ilości przetwarzanych rekordów, a więc lepsze wykorzystanie informacji zawartej w statystykach.
  • Interleaved execution – był poważną próbą rozwiązania problemu MSTVF (multi-statement table-valued functions), gdzie do wersji SQL 2016 optymalizator zakładał, że taka funkcja zwróci jeden rekord, w SQL 2016 zakłada, że zwróci 100 rekordów, a w SQL 2017 cały proces został przebudowany. Zamiast jednokrotnego przebiegu Optymalizacja -> Wykonanie nastąpiła całkowita przebudowa procesu, gdzie MSTVF jest wykonywana jako pierwszy krok, a dopiero po jej wykonaniu jest tworzony plan dla pozostałej części zapytania.

Obecnie zostały dodane kolejne funkcjonalności:

  • Table Variable Deferred Compilation – bardzo ważna funkcjonalność pozwalająca na wykorzystanie realnej liczności zmiennej tabelarycznej podczas tworzenia planu wykonania zapytania.
  • Batch Mode on Rowstore – rozwinięcie możliwości przetwarzania wsadowego dla zwykłych tabel, a nie tylko columnstore.
  • T-SQL Scalar UDF Inlining – rozwiązanie wykorzystujące mechanizm FROID, który pozwala na analizę kodu funkcji skalarnej i próbę jej zastąpienia przez odpowiednie zapytanie na bazie operacji na zbiorach.
  • Approximate QP realizowany poprzez Approximate Count Distinct – czyli bazujące na algorytmie Flajolet-Martin rozwiązanie HyperLogLog pozwalające poprzez oszacowanie podzbiorów podać interesującą nas wartość dla całego zbioru.

Jak wynika z tego krótkiego przeglądu, wysiłki firmy Microsoft koncentrują się na dodatkowym wsparciu dla Query Procesor w miejscach, które od „zawsze” były wskazywane jako problematyczne.

Ponieważ wszystkie te nowości są dość istotne, w kolejnych wpisach postaram się dokładniej przybliżyć ich funkcjonalność, zaczynając od nowości wdrożonych w SQL Server 2017.