Po zainstalowaniu procedury, jeśli zostanie ona wykonana, domyślnie zwraca ona tylko uruchomione procesy użytkownika i dostarcza następujące informacje dla każdego procesu:

KolumnaOpisWyświetlane przez sp_whoPokazane przez sp_who2
dd gg:mm:ss.mssPokazuje czas trwania polecenia. Możemy użyć tej kolumny do identyfikacji długotrwałych transakcjiNieNie
session_idIdentyfikator sesji procesutaktak
sql_textAktualnie uruchomione polecenie SQLNieNie
login_nameNazwa logowania powiązana z procesemtaktak
wait_infoInformacje o oczekiwaniu na proces (zagregowane) na identyfikatorze SPID, taki jak CXPACKET, ASYNC_NETWORK_IO wraz z czasem oczekiwaniaNietak
CPUcałkowity czas procesora zużywany przez zapytanieNietak
tempdb_allocationsLiczba wykonanych zapisów Tempdb – Jeśli zapytanie korzysta z bazy danych TempDB, otrzymujemy informacje o alokacjach tempdb przy użyciu tej kolumny. Na przykład, jeśli użyjemy zmiennej tabelarycznej lub tabeli tymczasowej, zostanie ona utworzona w TempDB i możemy śledzić informacje za pomocą tych kolumnNieNie
tempdb_currentLiczba aktualnie przydzielonych stron Tempdb – Jeśli zapytanie korzysta z bazy danych TempDB, otrzymujemy informacje o alokacjach tempdb przy użyciu tej kolumny. Na przykład, jeśli użyjemy zmiennej tabelarycznej lub tabeli tymczasowej, zostanie ona utworzona w TempDB i możemy śledzić informacje za pomocą tych kolumnNieNie
blocking_session_idIdentyfikator sesji blokującejtaktak
readsliczba wykonanych odczytówNieDysk we/wy
writesliczba wykonanych zapisówNieDysk we/wy
physical readsliczba wykonanych fizycznych odczytówNieDysk we/wy
used_memoryilość używanej pamięciNieNie
statusStan procesutaktak
open_tran_countliczba wykorzystanych transakcjiNieNie
percent_completeMożemy sprawdzić procentowy stan wykonania kilku poleceń za pomocą DMV sys.dm_exec_requests, takich jak polecenia tworzenia kopii zapasowych i przywracania bazy danych. Sp_WhoIsActive wykorzystuje te informacje DMV i wyświetla je jako dane wyjścioweNieNie
host_nameNazwa komputera hostataktak
database_nameNazwa bazy danych, w której wykonywane jest zapytanietaktak
program_namePodaje nazwę aplikacji, z której łączy się użytkownik, np. Microsoft SQL Server Management Studio – Query, Azure Data Studio, SQL Server AgentNietak
start_timeCzas rozpoczęcia procesuNietak
login_timeCzas logowaniaNieNie
request_idIDIdentyfikator żądaniataktak
collection_timeCzas wykonania ostatniego uruchomienia procedury sp_whoisactiveNieNie

Kilka opcjonalnych parametrów i ich wykorzystanie.

@find_block_leaders:

Można ustawić wartość argumentu @find_block_leaders na 1 i posortować wyniki dla kolumny block_session_count, aby sprawdzić blokery potencjalnych klientów i zablokowane sesje.

EXEC sp_WhoIsActive
   @find_block_leaders = 1,
   @sort_order = '[blocked_session_count] DESC'

W danych wyjściowych widać, że identyfikator sesji 58 jest głównym blokerem i zablokował 2 sesje wymienione poniżej w tabeli wyjściowej.

@get_plans

Załóżmy, że badany jest problem z wydajnością w MS QL Server i zostało  zidentyfikowane problematyczne zapytanie. Dobrze jest , jeśli można uzyskać plan jego wykonania, aby spojrzeć na kosztowne operatory.

Można podać argument @get_plans=1, który  zawiera  dodatkową kolumnę w danych wyjściowych z planem wykonania XML.

EXEC sp_WhoIsActive @get_plans = 1;

@get_locks

Można użyć tego argumentu, aby uzyskać fragment XML, zawierający szczegółowe informacje o blokadach utrzymywanych w sesji SQL Server. Na wyjściu otrzymuje się dodatkowe kolumny.

@get_additional_info

Można ustawić kilka parametrów sesji, które również mogą wpłynąć na wydajność zapytania. Sp_WhoIsActive podaje argument @get_additional_info i pokazuje informacje o tych parametrach.

EXEC sp_WhoIsActive 
 @get_additional_info = 1

@show_system_spids

Można ustawić wartość na 1 , aby przechwytywać informacje o procesach w tle i systemie. Na ogół nie jest to zbyt interesujące, z wyjątkiem obserwowania aktywności wykonywanej przez usługi Service Broker.

 @show_own_spid

Można ustawić wartość na 1 , aby przechwycić informacje o sesji, z której aktualnie się  korzysta.

Pięć typów filtrów na wybrane kolumny:

@filter_type

  • session” filtr na kolumnie [session_id]
  • program” filtr na kolumnie [program_name]
  • database” filtr na kolumnie [database_name]
  • login” filtr na kolumnie [login_name]
  • host” filtr na kolumnie [host_name]

@filter

Wartość filtrowana

Np.

EXEC sp_WhoIsActive 
    @filter_type = 'host', 
    @filter = 'APP%';

EXEC sp_WhoIsActive 
    @filter_type = 'login', 
    @filter = '%dar%';

Pięć typów filtrów wykluczeńna wybrane kolumny:

@not_filter_type

  • session” filtr na kolumnie [session_id]
  • program” filtr na kolumnie [program_name]
  • database” filtr na kolumnie [database_name]
  • login” filtr na kolumnie [login_name]
  • host” filtr na kolumnie [host_name]

@not_filter

Wartość filtrowana

Np.

EXEC sp_WhoIsActive 
    @not_filter_type = 'host', 
    @not_filter = 'APP%';

EXEC sp_WhoIsActive 
    @not_filter_type = 'login', 
    @not_filter = '%dar%';

Parametry te można łączyć:

EXEC sp_WhoIsActive 
    @filter_type = 'host', 
    @filter = 'APP%'
    @not_filter_type = 'login', 
    @not_filter = '%dar%';


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl