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

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top