| Termin | Definicja |
|---|---|
| Forced Plan | Forced Plan to wymuszony, zapamiętany plan wykonania zapytania, stosowany niezależnie od decyzji optymalizatora. Forced Plan w SQL Server i Query StoreForced Plan to wymuszony plan wykonania zapytania zapisany w mechanizmie Query Store silnika Microsoft SQL Server. Plan wykonania opisuje sposób realizacji instrukcji T-SQL, między innymi kolejność operacji, użycie indeksów, rodzaj złączeń, sposób agregacji oraz metody odczytu danych. Zwykle plan jest wybierany przez optymalizator zapytań na podstawie tekstu instrukcji, parametrów, statystyk, dostępnych indeksów, szacowanej liczby wierszy i kosztu poszczególnych operatorów. Wymuszenie planu zmienia ten proces: SQL Server otrzymuje wskazanie, aby dla określonego zapytania korzystać z wybranego planu zapisanego w Query Store. Wymuszony plan jest powiązany z identyfikatorem zapytania oraz identyfikatorem planu w Query Store. Nie oznacza to ręcznego zapisania całego planu jako niezależnego skryptu ani wyłączenia optymalizatora. Silnik nadal musi skompilować instrukcję i sprawdzić, czy wskazany plan może zostać zastosowany w aktualnych warunkach. Forced Plan jest więc mechanizmem kontroli wyboru planu, a nie uniwersalnym nakazem wykonywania każdego operatora bez żadnej weryfikacji. Dlaczego plan zapytania bywa wymuszanyNajczęstszym powodem użycia Forced Plan jest regresja wydajności. Regresja występuje wtedy, gdy po zmianie statystyk, danych, indeksów, parametrów lub wersji silnika SQL Server zaczyna wybierać plan, który dla konkretnego zapytania działa gorzej niż plan używany wcześniej. Query Store przechowuje historię planów i czasów wykonania, dlatego można porównać plan wolniejszy z wcześniejszym planem o lepszych parametrach. Wymuszenie może wtedy ograniczyć wpływ automatycznej zmiany planu do jednego zidentyfikowanego zapytania. Przykładowo zapytanie filtrujące tabelę po kolumnie o nierównomiernym rozkładzie wartości może raz otrzymać plan wykorzystujący indeks, a innym razem plan z pełnym skanowaniem tabeli. Różnica może wynikać z parametrów użytych podczas kompilacji albo ze zmienionych statystyk. Sam fakt, że jeden plan był szybki w przeszłości, nie dowodzi jednak, że będzie optymalny zawsze. Plan wybrany dla małej liczby wierszy może być niekorzystny przy dużym wyniku, a plan dobry dla dużego zbioru może powodować niepotrzebny koszt przy małym wyniku. Wymuszanie, kontrola i cofnięcie planuW SQL Server wymuszenie planu może być wykonane procedurą systemową Status wymuszenia można analizować w metadanych Query Store, a cofnięcie wykonuje procedura Ograniczenia Forced Plan w praktyceWymuszony plan nie naprawia źródłowej przyczyny regresji i nie poprawia automatycznie wszystkich zapytań o podobnej treści. Dotyczy konkretnego identyfikatora zapytania w określonej bazie. Nawet niewielka zmiana tekstu instrukcji, schematu, dostępnych obiektów albo kontekstu może spowodować, że SQL Server potraktuje ją jako inne zapytanie lub nie będzie mógł zastosować zapisanej wersji planu. Z tego powodu Forced Plan powinien być poprzedzony analizą historii wykonania, parametrów, statystyk i planów rzeczywiście obserwowanych w Query Store. W przypadku problemów z działaniem wymuszenia trzeba rozróżnić trzy sytuacje: plan został zaakceptowany i jest używany, plan został wymuszony, ale jego zastosowanie zakończyło się niepowodzeniem, albo wymuszenie zostało usunięte. Query Store może przechowywać informacje o takim stanie oraz komunikaty opisujące przyczynę niepowodzenia. Sama obecność numeru planu w konfiguracji nie jest więc wystarczającym dowodem, że każda realizacja zapytania odbywa się zgodnie z oczekiwaniem. Diagnostyka powinna obejmować aktualny plan, statystyki wykonania i stan Query Store, a po zmianach w indeksach lub strukturze bazy wymuszony plan należy ponownie zweryfikować. |