официальный партнёр 1С по деловому софту
Закрыть
Логин:
Пароль:
Забыли свой пароль?
  Войти
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
 
8(495)229-30-42

MSSQL: текущие запросы, транзакции и их отмена

Иногда возникает желание посмотреть что именно сейчас делается в SQL: какие запросы выполняются и какие транзакции активны?

Сделать это можно следующим образом.

Текущие запросы, с их текстами
select session_id, status, wait_type, command, last_wait_type  
  , qt.text sql_text  
  , total_elapsed_time/1000 as [total_elapsed_time, sec],  
         wait_time/1000 as [wait_time, sec], (total_elapsed_time - wait_time)/1000 as [work_time, sec] , percent_complete 
    from sys.dm_exec_requests as qs  
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt  
    where session_id >= 50 and session_id <> @@spid -- чтоб исключить текущую сессию и этот запрос

Самая долгая транзакция
DBCC OPENTRAN 
Возвращает результаты в виде
Oldest active transaction:
   SPID (server process ID): 65
   UID (user ID) : -1
   Name          : user_transaction
   LSN           : (14627553:1424:2)
   Start time    : Mar 12 2018  5:25:34:807PM
   SID           : 0x01

Подробности транзакции по SPID
DECLARE @sqltext VARBINARY(128)
SELECT @sqltext = sql_handle
FROM sys.sysprocesses
WHERE spid = [SPID, полученный из DBCC OPENTRAN]
SELECT *
FROM sys.dm_exec_sql_text(@sqltext)
GO

Принудительно откатить транзакцию, можно убив процесс
KILL [SPID, полученный из DBCC OPENTRAN]