Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить блокирующий запрос в blocked process report? / 8 сообщений из 8, страница 1 из 1
04.05.2019, 10:30
    #39809652
vi0
vi0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
Microsoft SQL Server 2012 Express SP4 (64-bit)

Кратко:

Экспериментирую в профайлере с событием "blocked process report" с целью получить тексты запросов заблокированного и блокирующего. Первый получаю, а на месте второго выводится команда следующая за запросом, который фактически был заблокирован.

Подробно:

- Настраиваю базу для получения события "blocked process report"
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'blocked process threshold', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'show advanced options', 0;
GO
RECONFIGURE;
GO



- В профайлере включаю отслеживание события "blocked process report"

- Сначала в первом сеансе, потом втором выполняю следующий запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
begin tran
go

UPDATE t1 SET c3 = 'a'
from [test1].[dbo].[t1] as t1 WITH(SERIALIZABLE)
WHERE c4 = 100
go 

print 123
go



- Как я и хотел, второй сеанс ожидает завершения первого, т.к. транзакция в первом не закрыта.
- Профайлер показывает это ожидание событием "blocked process report", в котором следующее (см ниже под спойлером)

Вопрос: Почему в поле заблокированного запроса выводится print, а не UPDATE?

<blocked-process-report monitorLoop="27156">
<blocked-process>
<process id="process16e342558" taskpriority="0" logused="0" waitresource="KEY: 5:72057594039369728 (dbff0d4a5b42)" waittime="9953" ownerId="620453" transactionname="user_transaction" lasttranstarted="2019-05-04T13:39:29.430" XDES="0x172557368" lockMode="RangeX-X" schedulerid="1" kpid="8444" status="suspended" spid="61" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2019-05-04T13:39:29.430" lastbatchcompleted="2019-05-04T13:39:29.430" lastattention="1900-01-01T00:00:00.430" clientapp="Среда Microsoft SQL Server Management Studio - запрос" hostname="" hostpid="3632" loginname="\User" isolationlevel="read committed (2)" xactid="620453" currentdb="5" lockTimeout="4294967295" clientoption1="671090784" clientoption2="390200">
<executionStack>
<frame line="2" stmtstart="4" sqlhandle="0x020000005bbf481b1f8de1209b28a9bcf1bc548cc34bbaa20000000000000000000000000000000000000000"/>
</executionStack>
<inputbuf>

UPDATE t1 SET c3 = 'a'
from [test1].[dbo].[t1] as t1 WITH(SERIALIZABLE)
WHERE c4 = 100
</inputbuf>
</process>
</blocked-process>
<blocking-process>
<process status="sleeping" spid="66" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2019-05-04T13:39:26.973" lastbatchcompleted="2019-05-04T13:39:26.973" lastattention="1900-01-01T00:00:00.973" clientapp="Среда Microsoft SQL Server Management Studio - запрос" hostname="" hostpid="7912" loginname="\User" isolationlevel="read committed (2)" xactid="620446" currentdb="1" lockTimeout="4294967295" clientoption1="671090784" clientoption2="390200">
<executionStack/>
<inputbuf>

print 123
</inputbuf>
</process>
</blocking-process>
</blocked-process-report>
...
Рейтинг: 0 / 0
04.05.2019, 11:25
    #39809659
vi0
vi0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
авторВопрос: Почему в поле заблокированного запроса выводится print, а не UPDATE?

Опечатался. Верно так:
Почему в поле блокирующего запроса выводится print, а не UPDATE?
...
Рейтинг: 0 / 0
04.05.2019, 15:51
    #39809720
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
vi0,

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

закоментите go между update и print получите их обе в inputbuff
...
Рейтинг: 0 / 0
04.05.2019, 16:08
    #39809722
vi0
vi0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
felix_ff,

а к чему такая логика, в контексте расследования блокировок? где можно прочитать про это?
Дело в том что я не могу повлиять на текст запросов, т.к. его формирует сервер приложений.
...
Рейтинг: 0 / 0
04.05.2019, 17:10
    #39809734
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
vi0а к чему такая логика, в контексте расследования блокировок?Считаете, что сервер обязан хранить тектсы всех выполненных в транзакции батчей до ее завершения? Плюс для каждой блокировки хранить ссылку на батч, который ее наложил?
...
Рейтинг: 0 / 0
04.05.2019, 17:22
    #39809738
vi0
vi0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
invmvi0а к чему такая логика, в контексте расследования блокировок?Считаете, что сервер обязан хранить тектсы всех выполненных в транзакции батчей до ее завершения? Плюс для каждой блокировки хранить ссылку на батч, который ее наложил? даже и не знаю
просто изучаю инструмент и до сих пор думал, что я чего то недонастроил
...
Рейтинг: 0 / 0
04.05.2019, 17:46
    #39809744
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
vi0,

Этот инстумент предназначен только для генерации уведомлений о том, что сессия S1 была заблокирована сессией S2.
К тому же, невозможно гарантированно выявить блокирующий запрос.
...
Рейтинг: 0 / 0
04.05.2019, 18:10
    #39809753
vi0
vi0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить блокирующий запрос в blocked process report?
invmvi0,

Этот инстумент предназначен только для генерации уведомлений о том, что сессия S1 была заблокирована сессией S2.
К тому же, невозможно гарантированно выявить блокирующий запрос. я бы не сказал, что только, с учетом того сколько полей в этом отчете
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить блокирующий запрос в blocked process report? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]