Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
leonix Member Откуда: Сообщений: 408 |
Есть запрос который выдает блокировки. SELECT * FROM sys.dm_tran_locks Можно ли как то узнать как долго уже существует блокировка. Чтобы мониторить зависшие и предпринимать меры какиенибудь. |
13 янв 21, 12:20 [22262552] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37113 |
sys.dm_os_waiting_tasks |
13 янв 21, 12:53 [22262577] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
leonix Member Откуда: Сообщений: 408 |
Посмотрел. Не понял. Это ожидания вроде. Мою блокировку может никто не ждать или подождали и откатились. |
||||
13 янв 21, 13:00 [22262586] Ответить | Цитировать Сообщить модератору |
leonix Member Откуда: Сообщений: 408 |
спасибо, вроде то что надо
Если клиент начал транзакцию, заблокировал кучу ресурсов и завис. Блокировка типа зависшая будет. |
||||||
13 янв 21, 13:19 [22262599] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1636 |
leonix, "завис" это очень условное определение. этим термином оперируют люди а не машины, пытаясь интерпретировать время исполнения некоего рабочего процесса в временные рамки удобные для их восприятия. машина или выполняет работу или простаивает. (есть частные случаи исключительных ситуаций связанных с потенциальными сбоями, которые разработчики не удосужились учесть) Если у вас клиентское приложение написано так что оно оперирует длинными транзакциями это поводов посмотреть в сторону изменения самого клиентского приложения, нежели пытаться на сервере разрулить внешнюю проблему. чисто имхо. Сообщение было отредактировано: 13 янв 21, 14:11 |
13 янв 21, 14:15 [22262645] Ответить | Цитировать Сообщить модератору |
leonix Member Откуда: Сообщений: 408 |
Абсолютно согласен. Чем я и занимаюсь. У меня 1000 пользователей. Пытаюсь понять какие сессии держат долгие блокировки и почему. |
||||
13 янв 21, 14:35 [22262657] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 34419 Блог |
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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8165 |
leonix, DBCC OPENTRAN, права потребуются. |
13 янв 21, 14:47 [22262675] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9587 |
running - запрос просто долго выполняется suspended - запрос ожидает высвобождения какого-то ресурса awaiting command - запустивший транзакцию ушел курить/обедать/домой/ в отпуск не завершив ее |
||||
13 янв 21, 14:55 [22262685] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |