| Termin | Definicja |
|---|---|
| Sp_whoisactive | sp_whoisactive to popularna, zewnętrzna procedura diagnostyczna Adama Machanica do analizy aktywnych zapytań. Sp_WhoIsActive jako procedura diagnostyczna SQL Serversp_WhoIsActive to zewnętrzna procedura składowana przeznaczona dla Microsoft SQL Server. Została opracowana przez Adama Machanica i służy do obserwowania aktywności instancji w czasie wykonywania zapytań. Nie jest elementem instalacji silnika SQL Server ani poleceniem języka T-SQL dostępnym automatycznie po utworzeniu bazy. Administrator instaluje jej definicję w wybranej bazie, zwykle w bazie administracyjnej, a następnie uruchamia ją z odpowiednimi uprawnieniami. Procedura pobiera informacje o sesjach i żądaniach wykonywanych aktualnie przez silnik. W wynikach można znaleźć między innymi identyfikator sesji, nazwę użytkownika, nazwę bazy danych, tekst wykonywanego polecenia, czas rozpoczęcia, czas trwania, stan żądania oraz informacje o blokowaniu. Dzięki temu sp_WhoIsActive pozwala szybko ustalić, czy opóźnienie wynika z długiego zapytania, oczekiwania na blokadę, przeciążenia zasobów albo nieprawidłowego zachowania konkretnej sesji. Jakie dane pokazuje uruchomienie sp_WhoIsActivePodstawowe wywołanie Do analizy tekstu polecenia można użyć parametrów takich jak Wynik można porządkować według różnych kryteriów za pomocą parametru Analiza blokad, oczekiwań i planów wykonaniasp_WhoIsActive jest przydatne przede wszystkim wtedy, gdy administrator potrzebuje korelować kilka rodzajów informacji z jednego momentu. Długi czas trwania zapytania bez oczekiwania może wskazywać na intensywne obliczenia, odczyt dużej liczby stron albo plan wykonania wymagający optymalizacji. Z kolei oczekiwanie typu blokującego wymaga ustalenia, która sesja utrzymuje blokadę oraz czy ma otwartą transakcję. Sesja widoczna jako aktywna może w rzeczywistości czekać na klienta, dysk, pamięć, blokadę lub inny zasób silnika. Opcja Plan wykonania uzyskany przez sp_WhoIsActive nie jest samodzielnym dowodem błędnej konfiguracji. Należy go zestawić z parametrami zapytania, indeksami, statystykami, rozmiarem tabel, częstotliwością wywołań oraz obciążeniem instancji. Procedura pokazuje stan chwilowy, więc pojedyncze uruchomienie może nie uchwycić problemu występującego okresowo. Przy zdarzeniach krótkotrwałych przydatne jest cykliczne zapisywanie wyników do tabeli za pomocą parametru Bezpieczne wykorzystanie w praktyce administracyjnejPrzed użyciem sp_WhoIsActive należy sprawdzić, w której bazie została zainstalowana procedura, z jakiego źródła pochodzi jej definicja oraz czy jej kod odpowiada wersji używanego SQL Server. Procedura powinna być traktowana jak dodatkowy komponent administracyjny, a nie jak zaufana funkcja systemowa. Jej instalację, aktualizację i usunięcie wykonuje się świadomie, z uwzględnieniem zależności skryptu oraz uprawnień konta uruchamiającego. Dostęp do informacji o innych sesjach i planach może wymagać podwyższonych uprawnień, w tym uprawnienia Wyniki sp_WhoIsActive należy zapisywać w sposób kontrolowany, ponieważ mogą zawierać teksty zapytań, nazwy obiektów, nazwy baz i informacje o środowisku. Przy długotrwałym monitoringu trzeba ograniczyć częstotliwość próbkowania, rozmiar przechowywanych planów oraz czas retencji tabeli docelowej. Sama procedura nie naprawia indeksów, nie zmienia planów wykonania i nie usuwa blokad. Jest narzędziem obserwacyjnym, które pomaga wskazać sesję lub żądanie wymagające dalszej analizy w SQL Server. W środowisku, w którym problem dotyczy aplikacji uruchamianej na laptopie lub komputerze PC, dane z SQL Server warto łączyć z informacjami o czasie odpowiedzi aplikacji, połączeniu sieciowym i obciążeniu systemu operacyjnego. Dzięki temu można odróżnić opóźnienie wynikające z pracy bazy od problemu klienta. Rzetelna diagnoza powinna obejmować powtarzalne pomiary, identyfikację konkretnego zapytania oraz weryfikację skutków każdej zmiany konfiguracji lub kodu. |