| Termin | Definicja |
|---|---|
| Plan zapytania | Plan zapytania można podejrzeć jako szacowany przed uruchomieniem albo rzeczywisty po jego wykonaniu. Czym jest plan zapytaniaPlan zapytania to uporządkowany opis czynności, które silnik bazy danych zamierza wykonać, aby zwrócić wynik zapytania SQL. Obejmuje między innymi sposób odczytu tabel, użycie indeksów, kolejność łączenia danych, filtrowanie rekordów, sortowanie oraz agregowanie wyników. Plan nie jest samym zapytaniem i nie zawiera danych wynikowych. Jest decyzją optymalizatora, czyli części silnika odpowiedzialnej za wybór metody wykonania zapytania spośród dostępnych wariantów. Ten sam tekst SQL może otrzymać inny plan w zależności od struktury tabel, istniejących indeksów, statystyk opisujących rozkład wartości, liczby rekordów oraz parametrów konfiguracji silnika. Plan może też zmienić się po utworzeniu lub usunięciu indeksu, aktualizacji statystyk albo zmianie danych. Z tego powodu analiza planu jest ważniejsza niż ocenianie wydajności wyłącznie na podstawie długości zapytania lub liczby jego klauzul. Plan szacowany i plan rzeczywistyPlan szacowany powstaje przed wykonaniem zapytania. Optymalizator przewiduje w nim między innymi liczbę wierszy przechodzących przez poszczególne operatory, przewidywany koszt operacji oraz sposób dostępu do danych. Taki plan pozwala sprawdzić, czy silnik rozważa użycie indeksu, czy odczytuje całą tabelę, a także w jakiej kolejności wykonuje połączenia. Samo wyświetlenie planu szacowanego nie musi powodować zwrócenia danych zapytania. Plan rzeczywisty jest rejestrowany podczas wykonania zapytania i zawiera również informacje o faktycznym przebiegu operacji. Można w nim porównać wartości szacowane z rzeczywistymi, na przykład przewidywaną i faktyczną liczbę wierszy. Duża różnica między tymi wartościami wskazuje na problem z oceną selektywności warunku, nieaktualne statystyki, nierównomierny rozkład danych albo użycie parametrów, dla których optymalizator wybrał nieodpowiedni wariant. Plan rzeczywisty może mieć dodatkowy narzut pomiarowy, dlatego jego zbieranie powinno być uwzględnione przy interpretacji czasu wykonania. Operatory i koszty wykonaniaPlan jest zwykle przedstawiany jako drzewo operatorów. Operatory niższego poziomu pobierają dane, a ich wyniki są przekazywane do operatorów wyższych. Przykładowe operacje to odczyt tabeli, odczyt indeksu, wyszukiwanie zakresu w indeksie, filtrowanie, sortowanie, agregacja oraz łączenie dwóch zbiorów. Odczyt całej tabeli może być prawidłowym wyborem, gdy zapytanie zwraca dużą część jej zawartości. Użycie indeksu nie jest automatycznie korzystniejsze, ponieważ wiele pojedynczych odwołań do danych może kosztować więcej niż sekwencyjny odczyt dużego fragmentu tabeli. W planie należy sprawdzać nie tylko pojedynczy operator oznaczony wysokim kosztem, lecz także przepływ wierszy między operatorami. Szczególne znaczenie mają sortowania, wielokrotne skanowanie tych samych danych, operacje łączenia wykonywane na dużych zbiorach oraz sytuacje, w których filtr jest stosowany dopiero po odczytaniu wielu rekordów. Koszt przedstawiany przez silnik jest miarą używaną do porównywania planów, a nie uniwersalnym czasem w sekundach. Rzeczywisty czas zależy także od szybkości pamięci masowej, dostępnej pamięci operacyjnej, obciążenia systemu i równoległości wykonania. Jak wykorzystuje się plan przy diagnostyceAnalizę warto rozpocząć od porównania planu szacowanego z rzeczywistym oraz od sprawdzenia, który operator przekazuje najwięcej danych do kolejnego etapu. Jeżeli filtr miał zwrócić niewielką liczbę rekordów, a silnik oszacował lub odczytał ich bardzo dużo, należy zweryfikować warunek, typy danych, statystyki i indeksy obejmujące kolumny używane w wyszukiwaniu. Niezgodność typów danych może powodować niejawne konwersje i ograniczać możliwość efektywnego wykorzystania indeksu. Zmiana zapytania bez potwierdzenia problemu w planie może jedynie przenieść koszt do innego operatora. Plan zapytania jest również przydatny podczas sprawdzania, czy problem wynika z samego SQL, czy z warunków uruchomieniowych. Dwa identyczne zapytania mogą działać różnie przy innych parametrach, rozmiarze bufora danych lub poziomie równoległości. Diagnostyka powinna obejmować tekst zapytania, plan, czasy wykonania, liczbę odczytanych stron lub bloków oraz moment ostatniej aktualizacji statystyk. Przy serwisowaniu komputera lub laptopa analizę można uzupełnić o kontrolę pamięci operacyjnej, stanu dysku i obciążenia procesora, ponieważ ograniczenia sprzętowe wpływają na czas wykonania, ale nie zmieniają logicznej poprawności planu. |