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

Откуда:
Сообщений: 408
Есть запрос который выдает блокировки.

SELECT * FROM sys.dm_tran_locks

Можно ли как то узнать как долго уже существует блокировка. Чтобы мониторить зависшие и предпринимать меры какиенибудь.
13 янв 21, 12:20    [22262552]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37113
sys.dm_os_waiting_tasks
13 янв 21, 12:53    [22262577]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1636
leonix,

блокировка существует в определенном контексте, смотрите на поле request_owner_type если оно TRANSACTION
то request_owner_id это transaction_id
далее лезете в sys.dm_tran_database_transactions и находите время начала транзакции.

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

хотите более точно отслеживать время наложения: создавайте XE сессию с мониторингом событий наложения блокировок.

блокировки априори не бывают "зависшыми".
если сессия не может по какой то причине получить блокировку на ресурс request_status будет к примеру WAIT
то вы можете посмотреть чего именно ждет сессия в sys.dm_os_waiting_tasks
13 янв 21, 12:53    [22262581]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
leonix
Member

Откуда:
Сообщений: 408
Гавриленко Сергей Алексеевич
sys.dm_os_waiting_tasks


Посмотрел. Не понял. Это ожидания вроде. Мою блокировку может никто не ждать или подождали и откатились.
13 янв 21, 13:00    [22262586]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
leonix
Member

Откуда:
Сообщений: 408
felix_ff
leonix,

блокировка существует в определенном контексте, смотрите на поле request_owner_type если оно TRANSACTION
то request_owner_id это transaction_id
далее лезете в sys.dm_tran_database_transactions и находите время начала транзакции.


спасибо, вроде то что надо

автор
блокировки априори не бывают "зависшыми".


Если клиент начал транзакцию, заблокировал кучу ресурсов и завис. Блокировка типа зависшая будет.
13 янв 21, 13:19    [22262599]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1636
leonix,

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

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

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

чисто имхо.

Сообщение было отредактировано: 13 янв 21, 14:11
13 янв 21, 14:15    [22262645]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
leonix
Member

Откуда:
Сообщений: 408
felix_ff
leonix,

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

чисто имхо.


Абсолютно согласен. Чем я и занимаюсь. У меня 1000 пользователей. Пытаюсь понять какие сессии держат долгие блокировки и почему.
13 янв 21, 14:35    [22262657]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34419
Блог
leonix
Чтобы мониторить зависшие и предпринимать меры какиенибудь.


DBCC OPENTRAN также может помочь

https://docs.microsoft.com/ru-ru/sql/t-sql/database-console-commands/dbcc-opentran-transact-sql?view=sql-server-ver15
13 янв 21, 14:46    [22262671]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
Владислав Колосов
Member

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

DBCC OPENTRAN, права потребуются.
13 янв 21, 14:47    [22262675]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать как долго уже наложена блокировка на ресурс  [new]
invm
Member

Откуда: Москва
Сообщений: 9587
leonix
Пытаюсь понять какие сессии держат долгие блокировки и почему.
Для этого нужно учитывать не только наличие блокировок, но и состояние сессии. Если грубо, то
running - запрос просто долго выполняется
suspended - запрос ожидает высвобождения какого-то ресурса
awaiting command - запустивший транзакцию ушел курить/обедать/домой/ в отпуск не завершив ее
13 янв 21, 14:55    [22262685]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить