| Termin | Definicja |
|---|---|
| Widok sys.dm_exec_query_stats | sys.dm_exec_query_stats to jedno z najczęściej wykorzystywanych DMV do analizy najbardziej kosztownych zapytań. Czym jest sys.dm_exec_query_stats w SQL Serversys.dm_exec_query_stats to dynamic management view (DMV), czyli widok zarządzania dynamicznego dostępny w Microsoft SQL Server. Zawiera zagregowane statystyki wykonania instrukcji języka T-SQL powiązanych z planami zapytań przechowywanymi w pamięci podręcznej. Wiersz widoku opisuje statystyki konkretnego planu i konkretnej instrukcji, a nie tylko tekst zapytania jako taki. Dzięki temu można sprawdzić, które instrukcje zużywają najwięcej czasu procesora, wykonują się najdłużej, są uruchamiane najczęściej albo generują największy łączny koszt pracy silnika. Widok nie jest trwałym dziennikiem historii. Dane są dostępne tak długo, jak długo odpowiedni plan wykonania pozostaje w plan cache. Statystyki mogą więc zniknąć po restarcie instancji, usunięciu planu z pamięci, zmianie planu lub innych zdarzeniach powodujących ponowną kompilację. Wartości należy interpretować jako pomiar od momentu utworzenia albo ostatniej kompilacji danego planu, a nie jako pełne podsumowanie wszystkich wykonań od początku działania bazy danych. Jakie informacje można odczytać z DMVsys.dm_exec_query_stats udostępnia między innymi liczbę wykonań, czas procesora oraz czas trwania zapytania. Dostępne są wartości sumaryczne, a także minimalne, maksymalne i ostatnie dla wybranych parametrów. Szczególne znaczenie mają total_worker_time, określający łączny czas pracy procesora, oraz total_elapsed_time, obejmujący całkowity czas upływający podczas wykonywania. Porównanie tych kolumn pomaga odróżnić instrukcje obciążające CPU od zapytań długo oczekujących na operacje wejścia-wyjścia, blokady lub inne zasoby. Przy analizie trzeba uwzględnić jednostki zwracane przez SQL Server. Czasy pracy procesora i czasy trwania są raportowane w mikrosekundach, przy czym dokładność zależy od sposobu pomiaru systemowego. Kolumny takie jak execution_count, last_execution_time, creation_time i last_elapsed_time pozwalają ustalić częstotliwość oraz aktualność obserwacji. Informacje o odczytach logicznych, zapisach, wierszach i liczbie kompilacji mogą wskazywać na koszt operacji, ale ich interpretacja zawsze wymaga odniesienia do planu wykonania i charakteru badanego zapytania. Połączenie statystyk z tekstem i planem zapytaniaSam widok sys.dm_exec_query_stats nie zawiera kompletnego tekstu instrukcji w każdej kolumnie ani pełnego obrazu planu. Do identyfikacji zapytania wykorzystuje się zazwyczaj wartości sql_handle, plan_handle, statement_start_offset i statement_end_offset. sql_handle służy do pobrania tekstu przez funkcję sys.dm_exec_sql_text, natomiast plan_handle pozwala odczytać plan z sys.dm_exec_query_plan. Offsety wskazują położenie konkretnej instrukcji w większym pakiecie T-SQL, procedurze lub partii poleceń, dlatego sam tekst obiektu może obejmować więcej instrukcji niż ta, której dotyczą statystyki. Praktyczne zestawienie wykonuje się przez połączenie DMV z funkcjami systemowymi za pomocą CROSS APPLY. Wyniki często sortuje się osobno według total_worker_time, total_elapsed_time, execution_count albo średniego kosztu obliczanego jako suma podzielona przez liczbę wykonań. Średnia może ukrywać pojedyncze bardzo wolne uruchomienia, a suma może preferować często wykonywane, lecz krótkie instrukcje. Po znalezieniu podejrzanego wpisu należy sprawdzić plan, predykaty, indeksy, kardynalność danych, parametry oraz ewentualne oczekiwania, zamiast uznawać samą wysoką wartość za dowód błędu. Ograniczenia interpretacji i bezpieczna diagnostykasys.dm_exec_query_stats rejestruje statystyki zakończonych wykonań widocznych w pamięci podręcznej planów. Nie zastępuje narzędzi obserwujących zapytania aktualnie wykonywane ani systemów przechowujących długoterminową historię. Do badania chwilowych blokad i aktywnych żądań służą inne widoki, między innymi sys.dm_exec_requests, sys.dm_os_waiting_tasks oraz widoki sesji. Z kolei analiza zmian w czasie wymaga okresowego zapisywania wyników, użycia Query Store albo narzędzi śledzących obciążenie zgodnie z przyjętą konfiguracją SQL Server. Dostęp do informacji zależy od uprawnień oraz wersji SQL Server. W wielu konfiguracjach odczyt danych dotyczących całej instancji wymaga uprawnienia VIEW SERVER STATE, a w nowszych wersjach i określonych scenariuszach stosowane jest także VIEW SERVER PERFORMANCE STATE. Brak odpowiednich uprawnień może ograniczyć zakres wyników albo uniemożliwić wykonanie zapytania diagnostycznego. Analizę należy prowadzić na właściwej bazie i instancji, z uwzględnieniem resetowania statystyk, zmian planów oraz faktu, że wartości mogą różnić się po ponownym uruchomieniu tej samej instrukcji. |