Database Engine Tuning Advisor – obsługa indeksów kolumnowych i wykorzystywanie Query Store

Jak podaje oficjalny SQL Server Blog w Management Studio 2016 od wersji 16.4 dostępne będą dwie nowe kluczowe funkcje w Database Engine Tuning Advisor:

  • analiza zapytań pod kątem użycia Columnstore / Rowstore,
  • analiza zapytań z użyciem Query Store.

Niestety funkcje te dostępne są jedynie przy analizie na SQL Server od wersji 2016+. Niemniej jednak zmiana ta była wyczekiwana bardzo długo (szczególnie względem Columnstore, które wprowadzono już w wersji 2012…)

 

Krótkie przypomnienie ;), indeksy kolumnowe pozwalają na trzymanie danych w tabeli względem kolumn. Wcześniej w SQL Server dane trzymane były w układzie wierszowym, a więc kolumny każdego rekordu „leżały” na stronie z danymi obok siebie. Zatem by zeskanować wybraną kolumnę ze wszystkich wierszy, należało odczytać również całe strony (z kolumnami, których przecież nie chcieliśmy). W tej sytuacji pomagał jedynie indeks nieklastrowany z dołączonymi kolumnami, ale ten z kolei wprowadza dodatkowy koszt.

Columnstore index można więc wyobrazić sobie jak zbiór mniejszych tabel, każda z nich zawiera klucz i jedną kolumnę. JOIN pomiędzy nimi pozwoliłby otrzymać kompletny wiersz.

Ta prosta analogia oczywiście ma się nijak do rzeczywistej niskopoziomowej obsługi tego typu indeksu. W praktyce, dołączając do tego kompresję otrzymuje się niezwykle szybką do przeszukiwań strukturę danych (wszak dane w takich indeksach są posortowane względem wartości w kolumnie, zatem mogą idealnie się kompresować w wyniku często powtarzających się wartości). Ma to istotne znacznie w przypadku gdy nasze zapytania dotyczą operacji na niewielkiej ilości kolumn (np. procesowanie danych dla kostki).  Oczywiście jest i druga strona medalu, utrzymywanie takiego indeksu jest również kosztowne. Podobnie skanowanie go w poszukiwaniu wszystkich wartości ze wszystkich kolumn… Ale coś za coś 😉 W każdym razie zmiany Tuning Advisor dodają możliwość proponowania miejsc, w których taki indeks ma sens, lub jeśli już go mamy – powinien być jednak użyty rowstore.

 

Natomiast Query Store to ficzer pokazany pierwszy raz w wersji 2014 (MS zaznaczał, że to preview choć zaimplementował jego kod w engine). Jest to mechanizm, który pozwala przechowywać informacje o uruchamianych zapytań w sposób bardziej trwały niż zwykły cache i z większą ilością detali. Dzięki temu możliwa jest dalsza analiza tego co, kiedy i w jakich okolicznościach było uruchamiane na serwerze. A w efekcie końcowym:

  • szybkie znalezienie i naprawienie regresji w użyciu planu zapytania (który zmienił się np. przez złe wykorzystanie statystyk). Możliwe staje się przywrócenie starego planu, który działał lepiej,
  • znalezienie informacji o cyklach uruchomienia zapytań,
  • szybką identyfikację najczęściej wykonywanych zapytań,
  • analizę historii zmian w planach wykonania dla konkretnego zapytania,
  • analizę wykorzystania zasobów sprzętowych podczas realizacji poszczególnych planów.

Tuning Advisor może skorzystać z tych informacji i lepiej dopasować swoje propozycje.

Dodaj komentarz