| Termin | Definicja |
|---|---|
| Query Store a parametryzacja | Query Store a parametryzacja — różne wartości parametrów mogą generować odrębne plany dla tego samego zapytania. Jak Query Store rozpoznaje zapytania z parametramiQuery Store w SQL Server zapisuje informacje o zapytaniach wykonywanych przez silnik, między innymi tekst zapytania, plan wykonania, statystyki wykonawcze oraz czas wystąpienia poszczególnych operacji. Parametryzacja wpływa na sposób identyfikowania zapytania, ponieważ wartości przekazane do parametru nie zawsze zmieniają logiczną postać instrukcji. Przykładowo zapytanie wykonane jako W Query Store należy odróżnić tekst zapytania, identyfikator zapytania, identyfikator planu oraz Parametryzacja prosta, wymuszona i jawnaSQL Server może zastosować parametryzację prostą dla części zapytań ad hoc. W takim przypadku literał występujący w instrukcji może zostać zastąpiony parametrem wewnętrznym, aby umożliwić ponowne użycie planu. Zakres tej optymalizacji zależy od rodzaju zapytania i reguł silnika. Parametryzacja nie jest gwarantowana dla każdej instrukcji, ponieważ niektóre konstrukcje mogą uniemożliwiać bezpieczne zastąpienie literałów parametrami. Parametryzację można także wymusić na poziomie bazy danych za pomocą opcji Dlaczego jedna instrukcja może mieć kilka planówRóżne wartości tego samego parametru mogą prowadzić do bardzo odmiennych rozkładów danych. Jeżeli jedna wartość wybiera dużą część tabeli, optymalizator może preferować skanowanie indeksu lub całej tabeli. Dla wartości występującej rzadko korzystniejszy może być seek po indeksie oraz odczyt niewielkiej liczby wierszy. Problem powstaje wtedy, gdy plan skompilowany dla jednego rozkładu danych zostaje ponownie wykorzystany przy wartości o zupełnie innej selektywności. Query Store rejestruje plany powiązane z zapytaniem, dlatego może ujawnić, że ta sama instrukcja korzystała w różnych okresach z kilku planów. W statystykach można analizować między innymi liczbę wykonań, czas trwania, zużycie procesora, odczyty logiczne i zapisy. Istotne jest sprawdzenie, czy różnice dotyczą rzeczywiście wartości parametrów, czy też wynikają ze zmiany indeksów, aktualizacji statystyk, ustawień kompatybilności bazy, zmian wersji silnika albo innych warunków kompilacji. W nowszych wersjach SQL Server dostępna jest funkcja Parameter Sensitive Plan Optimization, znana jako PSP Optimization. Mechanizm ten pozwala optymalizatorowi utrzymywać więcej niż jeden wariant planu dla parametryzowanego zapytania, gdy rozkład wartości parametru uzasadnia takie rozróżnienie. Query Store może wtedy pokazywać zapytanie nadrzędne oraz powiązane warianty planów. Nie należy jednak utożsamiać każdego zestawu wielu planów z działaniem PSP, ponieważ kilka planów może wynikać również z ręcznego wymuszenia planu, rekompilacji lub zmian środowiska wykonawczego. Analiza rozbieżności w Query StoreAnalizę warto rozpocząć od wyszukania instrukcji o wysokim całkowitym czasie trwania lub wysokim czasie procesora, a następnie porównać statystyki dla poszczególnych planów i przedziałów czasowych. Sam średni czas wykonania może ukrywać problem: plan może działać szybko dla większości wartości, lecz bardzo wolno dla określonego zakresu. Dlatego przydatne są także wartości minimalne, maksymalne i odchylenia statystyk, o ile są dostępne w używanym widoku Query Store. Należy sprawdzić tekst zapytania, typy parametrów i sposób ich przekazywania. Parametr typu Jeżeli analiza potwierdzi regresję, Query Store może służyć do porównania planu wcześniejszego z planem wolniejszym. W uzasadnionym przypadku można użyć funkcji wymuszenia planu, ale jest to działanie kontrolne, a nie uniwersalne rozwiązanie problemu parametryzacji. Przed jego zastosowaniem trzeba zweryfikować indeksy, aktualność statystyk, typy parametrów, zapytanie źródłowe i obciążenie. Stabilny plan dla jednej wartości może bowiem pogorszyć wykonanie dla innych wartości, a właściwym rozwiązaniem może być zmiana zapytania, statystyk, indeksowania albo zastosowanie mechanizmu PSP dostępnego w danej wersji SQL Server. |