| Termin | Definicja |
|---|---|
| SYS.DM_EXEC_REQUESTS | sys.dm_exec_requests zwraca listę aktualnie wykonywanych żądań na instancji. Migawka tego, co dzieje się na instancji w tej chwilisys.dm_exec_requests to dynamiczny widok zarządzania pokazujący każde żądanie aktualnie wykonywane przez silnik — zarówno zapytania użytkowników, jak i procesy wewnętrzne serwera. Każdy wiersz odpowiada jednemu żądaniu i niesie komplet danych diagnostycznych: session_id identyfikujący sesję, status z wartościami running, runnable, suspended lub sleeping, command określający rodzaj operacji, database_id wskazujący bazę, w której żądanie pracuje, oraz czasy — cpu_time i total_elapsed_time podawane w milisekundach. Do tego dochodzą liczniki wejścia i wyjścia: reads, writes i logical_reads. Widok jest ulotny z natury; dwa kolejne uruchomienia tego samego zapytania zwrócą inny obraz, bo pokazuje stan, a nie historię. Kolumny, które rozwiązują konkretne problemyPrzy zawieszonym programie handlowym najważniejsza jest kolumna blocking_session_id — wartość różna od zera oznacza, że dana sesja czeka na zwolnienie zasobu przez inną i podaje jej numer, co pozwala prześledzić łańcuch blokad aż do sesji źródłowej. Uzupełniają ją wait_type i wait_resource opisujące rodzaj oczekiwania oraz obiekt, na którym zapytanie stanęło. Osobno warto znać percent_complete, które dla wybranych długotrwałych operacji, takich jak BACKUP DATABASE, RESTORE czy DBCC CHECKDB, pokazuje realny postęp — to jedyny wygodny sposób, żeby odpowiedzieć na pytanie, ile jeszcze potrwa odtwarzanie bazy uruchomione w nocy. Kolumna open_transaction_count ujawnia z kolei sesje z niezatwierdzoną transakcją, czyli typową przyczynę rozrastającego się dziennika transakcji. Ograniczenia, o których łatwo zapomniećBez uprawnienia VIEW SERVER STATE użytkownik zobaczy wyłącznie własne żądanie, więc analiza blokad z konta operatora programu magazynowego zwykle nie ma szans się udać i kończy się wnioskiem, że serwer jest pusty. Druga pułapka to interpretacja czasów: total_elapsed_time obejmuje również oczekiwanie na sieć i na klienta, więc wysoka wartość nie musi oznaczać ciężkiego zapytania. Trzecia to sam sql_handle, który bywa pusty dla części procesów systemowych. Warto też pamiętać, że widok nie pokazuje sesji bezczynnych z otwartą transakcją, jeśli akurat nie wykonują żądania — do tego służy sys.dm_exec_sessions. Diagnostyka spowolnionej bazy w firmieKiedy wystawienie faktury w Subiekcie trwa minutę zamiast sekundy, zwykle winna jest konkretna blokada albo zapytanie skanujące całą tabelę bez indeksu, a nie za słaby serwer. Podłączamy się do instancji, ustalamy sesję blokującą, sprawdzamy plan wykonania i dobieramy poprawkę: brakujący indeks, zmianę poziomu izolacji albo przebudowę statystyk. Zgłoszenia przyjmujemy przez całą dobę, bo najgorsze przestoje zdarzają się na koniec miesiąca. |