Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как посмотреть какая часть процедуры выполняется  [new]
assmsk
Member

Откуда:
Сообщений: 142
Всем привет.
К примеру есть какая то процедура:

Create procedure test_proc as 

Insert t
Select  * from t2


Delete from t where id = 0


Update t set dt = getdate()


Запускаю ее:
exec test_proc



Смотрю через activity monitor на каком моменте она сейчас выполняется, предположим
что сейчас выполняется Delete :
Delete from t where id = 0



И вижу в active expensive queries этот фрагмент кода:
Delete from t where id = 0


Вопрос. Когда часть кода висит в каком то ожидании и delete пока что не происходит, то я не вижу какая часть процедуры выполняется в active expensive queries, а в Processes вижу
exec test_proc


Как в таком случае посмотреть какая конкретная часть кода в данный момент пытается выполниться?
9 окт 19, 15:18    [21990560]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть какая часть процедуры выполняется  [new]
msLex
Member

Откуда:
Сообщений: 6674
sys.dm_exec_requests.statement_start_offset +
sys.dm_exec_requests.statement_end_offset +
sys.dm_exec_sql_text.text
9 окт 19, 15:26    [21990571]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть какая часть процедуры выполняется  [new]
Cristiano_Rivaldo
Member

Откуда:
Сообщений: 319
SELECT d.name			database_name,
		   r.start_time,
		   r.[status],
		   r.transaction_id,
		   r.session_id,
		   blocking_session_id,	   
		   sq.[text],
		   r.sql_handle,
		   o.name   [object_name],
		   case 
				when r.transaction_isolation_level = 0 THEN 'не указан'
				when r.transaction_isolation_level = 1 THEN 'читать незафиксированные'
				when r.transaction_isolation_level = 2 THEN 'читать зафиксированные'
				when r.transaction_isolation_level = 3 THEN 'повторяемые результаты'
				when r.transaction_isolation_level = 4 THEN 'сериализуемые'
				when r.transaction_isolation_level = 5 THEN 'моментальный снимок'
		   END   isolation_lvl,
		   r.total_elapsed_time/1000 as [total_elapsed_time, sec],  
		   r.wait_time/1000 as [wait_time, sec], 
		  (r.total_elapsed_time - r.wait_time)/1000 as [work_time, sec] ,
		  ss.login_name,
		  CASE   
			 WHEN r.[statement_start_offset] > 0 THEN  
				--The start of the active command is not at the beginning of the full command text 
				CASE r.[statement_end_offset]  
				   WHEN -1 THEN  
					  --The end of the full command is also the end of the active statement 
					  SUBSTRING(sq.TEXT, (r.[statement_start_offset]/2) + 1, 2147483647) 
				   ELSE   
					  --The end of the active statement is not at the end of the full command 
					  SUBSTRING(sq.TEXT, (r.[statement_start_offset]/2) + 1, (r.[statement_end_offset] - r.[statement_start_offset])/2)   
				END  
			 ELSE  
				--1st part of full command is running 
				CASE r.[statement_end_offset]  
				   WHEN -1 THEN  
					  --The end of the full command is also the end of the active statement 
					  RTRIM(LTRIM(sq.[text]))  
				   ELSE  
					  --The end of the active statement is not at the end of the full command 
					  LEFT(sq.TEXT, (r.[statement_end_offset]/2) +1)  
				END  
			END AS [executing statement]  
    FROM sys.dm_exec_requests  r
		cross APPLY sys.dm_exec_sql_text(r.sql_handle) sq
		inner join sys.databases AS d ON  r.database_id = d.database_id
		LEFT JOIN sys.objects AS o ON sq.objectid = o.[object_id]
		left join sys.dm_exec_sessions ss on r.session_id = ss.session_id
    ORDER BY r.total_elapsed_time desc
9 окт 19, 16:17    [21990633]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть какая часть процедуры выполняется  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6612
Cristiano_Rivaldo,

перевод уровней изоляций впечатляет
9 окт 19, 16:25    [21990643]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть какая часть процедуры выполняется  [new]
msLex
Member

Откуда:
Сообщений: 6674
TaPaK
Cristiano_Rivaldo,

перевод уровней изоляций впечатляет
это официальный "перевод"
9 окт 19, 16:29    [21990653]     Ответить | Цитировать Сообщить модератору
 Re: Как посмотреть какая часть процедуры выполняется  [new]
Cristiano_Rivaldo
Member

Откуда:
Сообщений: 319
TaPaK,

Ну норм ...
9 окт 19, 16:30    [21990656]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить