Pregunta

Tenemos esta situación recurrente en la que varias veces a la semana nuestra solicitud deja de responder. Lo que me gustaría hacer es poder ver el texto de la consulta que se ejecuta en SQL Server.

Puedo usar sp_who Para ver las conexiones abiertas, pero no muestra el texto de consulta real.

Si puedo ver la consulta que está congelando mi base de datos, puedo tener un punto de partida para la optimización.

Esto sucedió hace unos minutos y nuestro administrador de SYS tuvo que reiniciar la caja. Este reinicio no es sostenible.

¿Qué pasos debo tomar?

Me gustaría ver el texto real de las consultas que se están ejecutando en mi servidor.

SQL Server 2000

¿Fue útil?

Solución

Use esto mientras el bloque está sucediendo:

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

Esto enumerará todas las espididas activas, que los están bloqueando y el SQL de cada Spid

EDITAR
Esta consulta es para SQL Server 2005+, la pregunta inicial no indicó SQL Server 2000

Otros consejos

Ver el artículo Cómo monitorear el bloqueo en SQL Server 2005 y en SQL Server 2000 para la definición de sp_blocker_pss08 (un script compatible con SQL Server 2000).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top