Можно ли регистрировать текст каждого запроса, выполненного на SQL Server?
-
28-10-2019 - |
Вопрос
У нас есть эта повторяющаяся ситуация, когда несколько раз в неделю наше заявление перестает отвечать. Что я хотел бы сделать, так это иметь возможность просмотреть текст запроса, работающего на SQL Server.
я могу использовать sp_who
Чтобы увидеть открытые соединения, но он не отображает фактический текст запроса.
Если я вижу запрос, который замораживает мою базу данных, я могу иметь отправную точку для оптимизации.
Это произошло несколько минут назад, и нашему администратору SYS пришлось перезагрузить коробку. Эта перезагрузка не является устойчивой.
Какие шаги мне предпринять?
Я хотел бы увидеть фактический текст запросов, которые запускаются на моем сервере.
SQL Server 2000
Решение
Используйте это, пока блок происходит:
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
Это перечисляет все активные паутины, которые блокируют их и SQL каждого срока
РЕДАКТИРОВАТЬ
Этот запрос предназначен для SQL Server 2005+, начальный вопрос не указал SQL Server 2000
Другие советы
Смотрите статью Как контролировать блокирование в SQL Server 2005 и в SQL Server 2000 для определения sp_blocker_pss08
(совместимый сценарий SQL Server 2000).