Возможно ли записать текст каждого запроса, выполняемого на SQL Server?

У нас есть эта повторяющаяся ситуация, когда несколько раз в неделю наше приложение перестает отвечать. То, что я хотел бы сделать, - это просмотреть текст запроса, запущенного на SQL Server.

Я могу использовать sp_who для просмотра открытых подключений, но он не отображает фактический текст запроса.

Если я могу увидеть запрос, который замораживает мою базу данных, я могу создать отправную точку для оптимизации.

Это произошло несколько минут назад, и нашему администратору sys пришлось перезагрузить коробку. Эта перезагрузка не является устойчивой.

Какие шаги я должен предпринять?

Я хотел бы видеть фактический текст запросов, которые выполняются на моем сервере.

SQL Server 2000

2 ответа

используйте это, пока блок происходит:

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

это будет список всех активных SPID, которые блокируют их и SQL каждого SPID

РЕДАКТИРОВАТЬ этот запрос предназначен для SQL Server 2005+, в начальном вопросе не указано SQL Server 2000


См. Статью " Как отслеживать блокировку в SQL Server 2005 и SQL Server 2000 для определения sp_blocker_pss08 (сценарий, совместимый с SQL Server 2000).

licensed under cc by-sa 3.0 with attribution.