Como comentado, a melhor ferramenta é sp_whoIsActive de Adam Machanic . Ele pode ser usado de várias maneiras, para ver o que está sendo executado no momento em que você inicia o script ou em loops para monitorar alguma ação específica, como consultas lentas, por exemplo.
Para executar um loop, dê uma olhada aqui: Como registrar atividades usando sp_whoisactive em um loop
Para detectar consultas lentas: Como usar sp_WhoIsActive para localizar consultas lentas do SQL Server
Você pode usar DMVs diretamente para obter suas consultas mais lentas e agir a partir daí. Verifica as consultas de diagnóstico de Glenn Berry .
E, finalmente, você pode usar esta consulta para encontrar consultas que consomem mais tempo. Você pode brincar com o dm_exec_query_stats para adicionar mais dados ou se juntar a outros para obter mais informações. Esteja ciente de que os dmvs são lavados e atualizados toda vez que o servidor é reiniciado.
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;
EDITAR
Uma nova opção já está disponível há algum tempo, First Reponder Kit . É um conjunto de scripts, fornecidos gratuitamente sob a licença MIT pela equipe BrentOzar, que ajudarão em várias tarefas, incluindo a solicitada pelo OP. Principalmente sp_BlitzFirst e sp_BlitzWho roteiros para este caso.