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

Plan Forcing Failures

Termin Definicja
Plan Forcing Failures

Plan Forcing Failures to licznik nieudanych prób wymuszenia planu z Query Store, wskazujący na jego nieaktualność.

Co oznacza Plan Forcing Failures w SQL Server

Plan Forcing Failures oznacza liczbę nieudanych prób zastosowania wymuszonego planu wykonania zapytania w funkcji Query Store silnika Microsoft SQL Server. Wymuszenie planu polega na wskazaniu dla określonego query_id konkretnego plan_id, który optymalizator powinien ponownie wykorzystać podczas kompilowania zapytania. Informacja o niepowodzeniach jest przechowywana w widoku katalogowym sys.query_store_plan, przede wszystkim w kolumnie force_failure_count.

Wartość tego licznika nie jest liczbą błędów wykonania zapytania ani liczbą wszystkich uruchomień zapytania. Wskazuje wyłącznie, ile razy SQL Server nie zdołał zastosować wymuszonego planu podczas ponownej kompilacji. Jeżeli wymuszenie się nie powiedzie, optymalizator może przygotować plan w zwykłym trybie. Sam wzrost licznika nie oznacza więc automatycznie, że zapytanie przestało zwracać wyniki, ale sygnalizuje, że zadana reguła stabilizacji planu nie działa zgodnie z oczekiwaniem.

Gdzie SQL Server zapisuje przyczynę niepowodzenia

W widoku sys.query_store_plan kolumna force_failure_count przechowuje liczbę nieudanych prób wymuszenia planu, natomiast last_force_failure_reason zawiera kod błędu odpowiadający ostatniej przyczynie niepowodzenia. Kolumna force_failure_reason_desc udostępnia opis tekstowy, który ułatwia interpretację informacji bez ręcznego mapowania numeru błędu. Przydatne są również pola is_forced_plan, query_id, plan_id oraz last_compile_start_time, ponieważ pozwalają ustalić, którego planu dotyczy problem i kiedy ostatnio nastąpiła kompilacja.

Podstawowe sprawdzenie można wykonać zapytaniem T-SQL:

SELECT query_id, plan_id, is_forced_plan, force_failure_count, last_force_failure_reason, force_failure_reason_desc, last_compile_start_time FROM sys.query_store_plan WHERE is_forced_plan = 1 OR force_failure_count > 0;

Wynik należy interpretować razem z identyfikatorem zapytania i treścią instrukcji zapisanej w Query Store. Sam numer plan_id opisuje plan należący do konkretnego zapytania, dlatego nie powinien być analizowany w oderwaniu od query_id. Licznik może zostać wyzerowany, gdy stan wymuszenia zostanie zmieniony z FALSE na TRUE, dlatego późniejsze wyzerowanie wartości nie zawsze oznacza usunięcie wcześniejszej przyczyny technicznej.

Dlaczego wymuszony plan może przestać działać

SQL Server nie może zastosować wymuszonego planu między innymi wtedy, gdy plan opiera się na obiektach, które nie są już dostępne albo zmieniły się w sposób uniemożliwiający jego odtworzenie. Przyczyną może być usunięcie tabeli lub indeksu, zmiana definicji obiektu, modyfikacja schematu, zmiana typów danych albo aktualizacja zapytania powodująca, że zapisany plan nie pasuje już do bieżącej postaci instrukcji. Ograniczenia dotyczą także określonych konstrukcji zapytań, takich jak operacje z tabelami zewnętrznymi, zapytania rozproszone, operacje pełnotekstowe, zapytania elastyczne oraz niektóre rodzaje kursorów.

Niepowodzenie może również pojawić się po zmianie środowiska kompilacji lub po wdrożeniu zmian w bazie danych. Wymuszony plan jest wskazówką dla optymalizatora, a nie gwarancją bitowej identyczności planu przy każdym wykonaniu. SQL Server ponownie kompiluje zapytanie i próbuje odtworzyć wybrane rozwiązanie w aktualnych warunkach. Jeżeli nie jest to możliwe, uruchamia normalną optymalizację, zwiększa force_failure_count i zapisuje przyczynę w polach związanych z błędem wymuszania.

Jak zweryfikować i uporządkować wymuszanie planu

Analizę należy rozpocząć od potwierdzenia, że plan nadal jest oznaczony jako wymuszony, a licznik odnosi się do bieżącego plan_id. Następnie trzeba porównać zapisany plan z aktualną definicją tabel, indeksów i zapytania. Warto sprawdzić ostatnie wdrożenia, zmiany schematu oraz sytuacje powodujące rekompilację. Samo ponowne wymuszenie planu bez rozpoznania przyczyny może tylko wyzerować licznik i ukryć problem do czasu następnej kompilacji.

Jeżeli plan nie jest już właściwy, wymuszenie można usunąć procedurą systemową sp_query_store_unforce_plan, podając odpowiednie query_id i plan_id. Jeżeli zachowanie zapytania uległo pogorszeniu, można przeanalizować inne plany zapisane dla tego samego query_id i wybrać plan odpowiadający aktualnej strukturze bazy. Przy utrzymującym się liczniku Plan Forcing Failures konieczne jest ustalenie konkretnego kodu z last_force_failure_reason, ponieważ dopiero ta informacja pozwala odróżnić nieaktualny plan od ograniczenia konstrukcji zapytania lub zmiany obiektów, na których plan się opiera.

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