Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Forced Plan

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 Store

Forced 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 wymuszany

Najczę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 planu

W SQL Server wymuszenie planu może być wykonane procedurą systemową sys.sp_query_store_force_plan. Procedura przyjmuje identyfikator zapytania oraz identyfikator planu, który ma zostać użyty. Przed wykonaniem takiej operacji trzeba ustalić, czy oba identyfikatory dotyczą tej samej bazy danych i tego samego zapytania. Dane o planach są dostępne między innymi w widoku katalogowym sys.query_store_plan, natomiast informacje o zapytaniach znajdują się w sys.query_store_query i powiązanych obiektach Query Store.

Status wymuszenia można analizować w metadanych Query Store, a cofnięcie wykonuje procedura sys.sp_query_store_unforce_plan. W nowszych wersjach SQL Server dostępne są również mechanizmy automatycznego korygowania regresji planów, ale ich działanie nie zastępuje oceny konkretnego przypadku. Po wymuszeniu należy obserwować czas wykonania, liczbę odczytów logicznych, użycie procesora, blokowanie oraz błędy. Jeżeli plan przestaje być korzystny, wymuszenie powinno zostać cofnięte albo zastąpione innym planem. Należy także sprawdzić, czy problem nie wynika z brakujących indeksów, nieaktualnych statystyk, nieprawidłowego typowania parametrów lub zmiany zapytania.

Ograniczenia Forced Plan w praktyce

Wymuszony 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ć.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę