Utilizzare SP_WhoIsActive in SQL Server

Utilizzare SP_WhoIsActive in SQL Server 2019. Analisi delle prestazioni

In questo articolo vedremo come utilizzare SP_WhoIsActive in Sql Server per monitorare le attività in esecuzione nell’istanza SQL.

Microsoft ha fornito due stored procedure di sistema denominate “sp_who” e “sp_who2” per recuperare tutti i processi attualmente in esecuzione nell’istanza, ma non dispongono di molte informazioni utili che possono facilitare il processo di monitoraggio e analisi delle prestazioni, inoltre mostrano molte informazioni inutili (processi di sistema).

Per questo motivo, Adam Machanic (MVP di Microsoft dal 2004) ha sviluppato una stored procedure più potente chiamata “sp_whoisactive” per colmare il divario tra le esigenze effettive degli amministratori di database e le procedure attualmente fornite (sp_who e sp_who2).

Nelle sezioni seguenti verranno brevemente illustrate le stored procedure sp_who e sp_who2 e come installare e utilizzare SP_WhoIsActive in Sql Server.

sp_Who e sp_Who2

Come accennato in precedenza, Microsoft ha fornito sp_Who e so_Who2 per il monitoraggio delle attività in SQL Server. In questa sezione vedremo i dati restituiti da ogni stored procedure e quali sono le differenze tra di esse.

Come descritto nella documentazione ufficiale, sp_who “fornisce informazioni sugli utenti, le sessioni e i processi correnti in un’istanza del motore di database di Microsoft SQL Server. Le informazioni possono essere filtrate per restituire solo i processi che non sono inattivi, che appartengono a un utente specifico o che appartengono a una sessione specifica.”

sp_who restituisce informazioni quali l’ID del processo di sessione (SPID), l’ID del contesto di esecuzione (ECID), lo stato del processo, l’ID di sessione di blocco, il nome del database, l’account di accesso e il nome host associati a questo processo e il tipo di comando.

Utilizzare SP_WhoIsActive in SQL Server: Analisi Store Procecure sp_who
Utilizzare SP_WhoIsActive in SQL Server: Analisi Store Procecure sp_who

sp_Who2 è simile a sp_Who ma non è documentato né supportato, ma restituisce ulteriori informazioni e contatore delle prestazioni dai processi correnti, ad esempio il nome del programma che esegue il comando, I/O disco, tempo CPU, ultimo tempo di esecuzione batch.

Utilizzare SP_WhoIsActive in SQL Server: Analisi Store Procecure sp_who2
Utilizzare SP_WhoIsActive in SQL Server: Analisi Store Procecure sp_who2

Come mostrato nelle schermate precedenti, l’output di queste procedure mostra tutti i processi di sistema e utente in esecuzione che non è sempre necessario e l’utente può filtrare solo utilizzando il nome di accesso o l’ID di sessione, mentre potrebbe essere necessario nascondere i processi di sistema. Inoltre, gli output non contengono informazioni sul comando SQL attualmente in esecuzione, ad esempio il tempo di avvio dell’esecuzione, la durata dell’esecuzione, le informazioni WAIT e altre informazioni.

Scaricare e installare SP_WhoIsActive

Per scaricare la store procedure, è sufficiente aprire la sezione download del sito ufficiale e selezionare l’ultima versione disponibile. E’ anche possibile fare il download dal repository GitHub.

Una volta completato il download, è necessario aprire il file who_is_active.sql utilizzando SQL Server Management Studio ed eseguire lo script.

Utilizzare di SP_WhoIsActive in Sql Server

Dopo aver installato la procedura, se la eseguiamo, possiamo vedere che restituisce solo i processi utente in esecuzione per impostazione predefinita e fornisce le seguenti informazioni per ogni processo:

ColumnDescrizioneVisibile in sp_whoVisibile in sp_who2
dd hh:mm:ss.mssProcess elapsed timeNoNo
session_idThe process session idSiSi
sql_textThe currently running SQL command

NoNo
login_nameThe login name associated with the process

SiSi
wait_infoThe process wait information (aggregated)

NoSi
CPUThe CPU time

NoSi
tempdb_allocationsNumber of Tempdb writes done

NoNo
tempdb_currentNumber of Tempdb pages currently allocated

NoNo
blocking_session_idThe blocking session Id

SiSi
readsnumber of reads done

NoDisk IO

writesnumber of writes done

NoDisk IO

physical reads

number of physical reads done

NoDisk IO

used_memorythe amount of memory used

NoNo
statusThe process status

SiSi
open_tran_count

the number of transactions used

NoNo
percent_completethe query completion percentage

NoNo
host_nameThe host machine name

SiSi
database_nameThe database name where the query is executed

SiSi
program_nameThe application that executed the query

NoSi
start_timeThe process start time

NoSi
login_timeThe login time

NoNo
request_idThe request Id

SiSi
collection_timeThe time that this last select was run

NoNo
Utilizzare SP_WhoIsActive in SQL Server -Risultati Esecuzione Store
Utilizzare SP_WhoIsActive in SQL Server -Risultati Esecuzione Store

Come illustrato di seguito, per mostrare i processi di sistema è necessario eseguire il comando seguente:


Exec sp_whoisactive @show_system_spids = 1

È possibile visualizzare ulteriori informazioni da questa procedura passando parametri aggiuntivi, ad esempio @get_additional_info, @get_locks, @get_avg_time e altri parametri.

Una delle cose sorprendenti di questa procedura è che è ben documentato e tutte le informazioni correlate possono essere ottenute eseguendo il seguente comando:


Exec sp_whoisactive @help = 1

Con l’utilizzo del comando help verranno mostrate a video tre sezioni:

  1. Informazioni generali: dove vengono fornite informazioni generali come la versione, il sito web, l’e-mail del creatore
  2. Descrizione dei parametri: dove viene fornito un elenco di tutti i parametri disponibili con la loro descrizione
  3. Descrizione delle colonne di output: un elenco completo di tutte le colonne di output disponibili con le relative descrizioni

Salvataggio dei dati di SP_WhoIsActive

Esistono molti motivi per cui è necessario salvare i risultati di una chiamata SP_WhoIsActive a una tabella.

  • Monitoraggio pianificato. Acquisizione dei risultati delle chiamate WhoIsActive a intervalli di 5 o 10 minuti per vedere cosa succede sul server Sql durante il giorno
  • Utilizzo come parte di un processo di compilazione
  • Utilizzo come parte di un sistema di gestione delle eccezioni che chiama automaticamente WhoIsActive ogni volta che si verifica un errore, per creare uno snapshot dello stato corrente dell’istanza del database

Se è necessario è possibile creare un processo dell’agent SQL che esegue periodicamente sp_whoisactive una procedura all’interno di un comando INSERT, ad esempio:


Insert Into [dbo].[Nome_Tabella] Exec sp_whoisactive

Quindi possiamo fare riferimento ai dati memorizzati in un secondo momento per un’ulteriore analisi.

Conclusione

In questo articolo sono state descritte brevemente le procedure sp_who, sp_who2 ed abbiamo visto come utilizzare sp_whoisactive in Sql Server.

Autore Bartolomeo

Consulente tecnico con la passione per il web e la tecnologia e tutto quello che le ronza intorno.
Nel tempo libero scrivo articoli per il mio blog su argomenti vari, in particolare su configurazione Windows, Linux e WordPress.

Condividi questo articolo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Ho letto la policy privacy e accetto il trattamento dei miei dati personali in conformità al D.Lgs. 196/2003