È possibile registrare il testo di ciascuna query eseguita su SQL Server?
-
28-10-2019 - |
Domanda
Abbiamo questa situazione ricorrente in cui più volte alla settimana la nostra applicazione smette di rispondere. Quello che vorrei fare è essere in grado di visualizzare il testo della query in esecuzione su SQL Server.
posso usare sp_who
Per vedere le connessioni aperte, ma non visualizza il testo di query effettivo.
Se riesco a vedere la query che sta congelando il mio database, posso avere un punto di partenza per l'ottimizzazione.
Questo è successo qualche minuto fa e il nostro amministratore SYS ha dovuto riavviare la scatola. Questo riavvio non è sostenibile.
Quali passi dovrei prendere?
Vorrei vedere il testo reale delle query in esecuzione sul mio server.
SQL Server 2000
Soluzione
Usa questo mentre il blocco sta accadendo:
SELECT
r.session_id AS spid
,r.cpu_time,r.reads,r.writes,r.logical_reads
,r.blocking_session_id AS BlockingSPID
,LEFT(OBJECT_NAME(st.objectid, st.dbid),50) AS ShortObjectName
,LEFT(DB_NAME(r.database_id),50) AS DatabaseName
,s.program_name
,s.login_name
,OBJECT_NAME(st.objectid, st.dbid) AS ObjectName
,SUBSTRING(st.text, (r.statement_start_offset/2)+1,( (CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE r.statement_end_offset
END - r.statement_start_offset
)/2
) + 1
) AS SQLText
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text (sql_handle) st
WHERE r.session_id!=@@SPID
Questo elencherà tutti i SPID attivi, che li stanno bloccando e il SQL di ogni SPID
MODIFICARE
Questa query è per SQL Server 2005+, la domanda iniziale non ha indicato SQL Server 2000
Altri suggerimenti
Vedi l'articolo Come monitorare il blocco in SQL Server 2005 e in SQL Server 2000 per la definizione di sp_blocker_pss08
(uno script compatibile SQL Server 2000).