Come commentato, il miglior strumento in circolazione è sp_whoIsActive di Adam Machanic . Può essere utilizzato in diversi modi, per vedere cosa è in esecuzione nel momento in cui si avvia lo script oppure è possibile eseguirlo in loop per monitorare alcune azioni specifiche, ad esempio query lente.
Per eseguire in un ciclo dare un'occhiata qui: Come registrare l'attività utilizzando sp_whoisactive in un ciclo
Per rilevare le query lente: Come utilizzare sp_WhoIsActive per trovare query SQL Server lente
È possibile utilizzare direttamente i DMV per ottenere le query più lente e agire da lì. Controlla le domande diagnostiche di Glenn Berry .
E infine puoi utilizzare questa query per trovare la maggior parte delle query che richiedono tempo. Puoi giocare con dm_exec_query_stats per aggiungere più dati o unirti ad altri per ottenere maggiori informazioni. Tenere presente che dmv viene rimosso e aggiornato ogni volta che il server viene riavviato.
SELECT creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY total_elapsed_time / execution_count DESC;
MODIFICARE
Una nuova opzione è già disponibile da qualche tempo, First Reponder Kit . È un insieme di script, forniti gratuitamente su licenza MIT dal team BrentOzar, che aiuteranno in vari compiti, incluso quello richiesto dall'OP. Principalmente sp_BlitzFirst e sp_BlitzChi script per questo caso.