Profilowanie zapytań to sposób, w jaki dowiesz się, co dzieje się w czarnej skrzynce wydajności SQL Server.
Użytkownicy mają łatwo. DBA nie.
Pomyśl o łatwych opcjach, jakie mają użytkownicy, gdy aplikacja bazy danych działa słabo:
- Idź po kawę i poczekaj.
- Obrażać komputer.
- Narzekaj na innych użytkowników.
- Prześlij zgłoszenie problemu.
Czy to nie jest życie Rileya w porównaniu z opcjami, które masz jako DBA?
- Poszukaj zablokowanych sesji.
- Sprawdź współczynniki trafień w buforze pamięci podręcznej.
- Zmierz maksymalne oczekiwanie we/wy.
- Zbadaj oczekiwaną długość życia strony.
- Sprawdź, czy brakuje indeksów lub czy trzeba je odbudować.
- Poszukaj blokad/zakleszczeń.
- Sprawdź użycie procesora.
- Przejrzyj dziennik aplikacji pod kątem komunikatów o braku pamięci.
- Upewnij się, że baza danych tempdb jest poprawnie skonfigurowana.
Może to być dowolny z tych problemów z oprogramowaniem, które zwykle prowadzą do rozwiązania polegającego na optymalizacji zapytania lub zmianie konfiguracji. Lub może to być problem sprzętowy, a rozwiązaniem jest zakup większej ilości pamięci lub mocy obliczeniowej.
Ponieważ aplikacje bazodanowe polegają głównie na wykonywaniu wielu zapytań SQL, problemy z wydajnością mają wiele miejsca do ukrycia w SQL Server. Jeśli jesteś użytkownikiem, możesz powiedzieć:„No cóż, problem musi leżeć gdzieś w tej czarnej skrzynce. Nie moja praca”.
Ale jako DBA nie masz tego luksusu. Musisz otworzyć czarną skrzynkę, wejść do środka, znaleźć bałagan i naprawić go.
Profilowanie zapytań 101 z monitorowaniem wydajności serwera SQL
Ogólnie rzecz biorąc, Twoim celem przy monitorowaniu wydajności serwera jest obserwowanie wydajności zapytań SQL w czasie i wzrostu wolumenu transakcji na serwerze SQL Server. Możesz osiągnąć ten cel na kilka sposobów.
Zobacz plan wyjaśnień
Plan wyjaśniania pokazuje, co SQL Server będzie robił podczas wykonywania zapytania, w tym tabele, do których dołączy, rodzaj połączenia, które wykona, liczbę wierszy, których będzie dotykać i indeksy, których użyje.
Co może ci powiedzieć plan wyjaśnień? Po pierwsze, możesz zobaczyć, jak ulepszyć samo zapytanie, na przykład usuwając JOIN z zagnieżdżoną pętlą, które jeden z twórców baz danych dodał do ogromnej tabeli. Możesz też wywnioskować z planu wyjaśnień, że musisz utworzyć lub przebudować indeks dla określonej tabeli.
Plan wyjaśniania jest dobrym punktem wyjścia do profilowania zapytań, nawet przed faktycznym wykonaniem podejrzanych zapytań.
Wykonaj zapytanie
Aby wykonać zapytania i zobaczyć, na które zasoby wpływają w czasie wykonywania, najpierw tworzysz ślady, aby oznaczyć zdarzenia w momencie ich wystąpienia. Dzięki śladom możesz przechwytywać dane i obserwować, czy nie pojawiają się błędy. Narzędzie do profilowania przechowuje dane przechwycone przez śledzenie i wyświetla je w sposób ułatwiający znajdowanie i rozwiązywanie problematycznych zapytań.
Połączenie śladów i narzędzia do profilowania może odpowiedzieć na wiele pytań:
- Które zapytania zajmują najwięcej pamięci?
- Ile czasu zajmuje wykonanie każdego zapytania?
- Które blokady SQL Server ustawia dla każdego zapytania?
- Jakie zapytania może wykonać SQL Server z bufora pamięci podręcznej? Jak często musi trafiać na dysk?
- Ile wierszy sprawdza każde zapytanie?
- Ile żądań na minutę spełnia baza danych?
Najdokładniejszy odczyt uzyskasz, wykonując zapytanie w produkcyjnych bazach danych, ale może to również spowolnić przetwarzanie przez rzeczywistych klientów i użytkowników. Jeśli możesz, przetestuj najpierw na instancjach programistycznych lub testowych, w których nie konkurujesz o pamięć lub I/O z instancją produkcyjną.
Mówiąc o klientach i użytkownikach, Twoim celem w profilowaniu zapytań jest ich zadowolenie. Profilowanie może łatwo odkryć dziesiątki problemów w Twojej bazie danych, ale powodem, dla którego otworzyłeś czarną skrzynkę, jest rozwiązanie najbardziej bolesnych problemów. Po przechwyceniu danych z jednego lub dwóch dni normalnego użytkowania można znaleźć problemy z wydajnością serwera SQL, które sprawiają najwięcej problemów użytkownikom. Być może brakujący indeks spowalnia pobieranie rekordów lub zbyt wiele indeksów spowalnia wstawianie rekordów i aktualizacje bazy danych. Może często używane zapytanie gromadzi informacje, na których nikt już nie dba.
Mądrze korzystaj z narzędzi do profilowania
Narzędzia do profilowania ratują Cię przed żmudnym procesem ręcznego konfigurowania każdego zdarzenia, filtra i wywołania procedury dla wszystkiego, co chcesz śledzić. Ponieważ tak wiele dzieje się w czarnej skrzynce wydajności SQL Server, możesz łatwo przechwycić zbyt dużo danych, aby zobaczyć las i drzewa.
Dobre narzędzia umożliwiają ostrożne wybieranie tego, co śledzisz, dzięki czemu na przykład nie rejestrujesz setek zdarzeń Lock:Acquired i niepotrzebnie zapełniasz nimi swój ekran. Jeśli jednak musisz zbadać często występujące zdarzenie, użyj filtrów, takich jak nazwa aplikacji lub nazwa tabeli.
Zamiast zapisywać dane śledzenia w tabeli w bazie danych, rozważ zapisanie ich w osobnym pliku. Dzięki temu obciążenie śledzenia nie będzie obciążeniem dla programu SQL Server i potencjalnym zniekształceniem wyników. Jeśli Twoje narzędzie do profilowania faworyzuje dane pobierane z tabeli, możesz później zaimportować dane z pliku do tabeli.
Popraw monitorowanie wydajności serwera SQL dzięki profilowaniu zapytań
Twoi użytkownicy trzymają się z dala od czarnej skrzynki wydajności SQL Server, ale Ty nie musisz. Profilowanie zapytań to sposób, w jaki otwierasz pudełko, dowiadujesz się, co dzieje się w środku i rozpoczynasz rozwiązywanie problemów.
Ale nie czekaj, aż będziesz miał kłopoty, aby z niego skorzystać. Profilowanie zapytań przypomina bardziej sprawdzanie oleju niż wymianę silnika. Pomaga w wykonywaniu zwykłych obowiązków DBA dotyczących aktualizowania przestarzałych zapytań i modyfikowania projektu, aby Twoje bazy danych nadążały za zmianami w firmie.