Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Hamber Member Откуда: Москва Сообщений: 310 |
Всех приветствую. Сисадмины, разработчики, подскажите пожалуйста вот что, т.к. на работе столкнулся вот с какой проблемой. Пользователь1 работает в системе, выполняя различные действия. Пользователи2,3,4 также в ней работают И вдруг другие пользователи понимают, что у них система зависла. Посмотрев информацию по серверу, мы понимаем что Пользователь1 всех завесил и у него открыта транзакция, которая блочит всех остальных на работу с этой таблицей. Т.е. на практике это так: Пользователь1 запустил процедуру A1. Транзакция открылась. Закрылась. Пользователь1 запустил процедуру A2. Транзакция открылась. Закрылась. Пользователь1 запустил процедуру A3. Транзакция открылась. Не закрылась т.к. появилась ошибка, и в результате некорректного написанного кода, она не откатилась. Пользователь1 запустил процедуру A4. Транзакция открылась. Закрылась. Пользователь1 запустил процедуру A5. Транзакция открылась. Закрылась. И всё. Следовательно Пользователь1 завесил всех остальных и заблокировал используемые им таблицы. Возможно ли средствами SQL, логов, трассировки узнать точное место(код,процедуру) которая у пользователя1 оставила открытую транзакцию, но не закрыла ее? Пользователь1 мог сделать после факта обнаружения зависшей транзакции 100 действий. Есть ли механизм,скрипты,процедуры, которую смогут мне выдать информацию примерно в таком виде: Пользователь 1 в 12:00 запустил процедура А3, Транзакцию открыл, но не закрыл. Она висит Х секунд/минут/часов, значит именно в этой процедуре произошел какой-то косяк. Возможно ли так подробно получать логи и как это возможно сделать? |
2 апр 15, 15:37 [17464976] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8303 |
Hamber, напишите обработчики ошибок в процедурах и будет Вам счастье. Все, что вы хотите в своем сообщении, будет ненужным. |
2 апр 15, 15:53 [17465083] Ответить | Цитировать Сообщить модератору |
Hamber Member Откуда: Москва Сообщений: 310 |
В данном аспекте я спрашиваю возможно ли получить эти данные и как. Вариант переписать код, вставить обработчик, "убить" программиста :), научить правильно и грамотно программировать - не подходит. Если что, то: SELECT @@VERSION Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86) Dec 10 2010 10:56:29 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2) |
2 апр 15, 15:57 [17465128] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Можно либо сделать такое самому, профайлером, либо сделать контроль в приложении (тогда будет падать производительность). |
||
2 апр 15, 16:12 [17465225] Ответить | Цитировать Сообщить модератору |
stavgreengo Member Откуда: Сообщений: 710 |
можно выставить флаги трассировки для фиксации дедлоков в журнал, если это они приводят к такой ситуации то можно будет разобраться после инцидента, а если нет, то отсечь по крайней мере эту версию. |
||||
2 апр 15, 16:48 [17465521] Ответить | Цитировать Сообщить модератору |
virtuOS Member Откуда: большая деревня Сообщений: 266 |
Может вот этим увидите? Имя процедуры и план показывает. |
2 апр 15, 16:59 [17465604] Ответить | Цитировать Сообщить модератору |
Crimean Member Откуда: Сообщений: 13148 |
однозначно - очень сложно типовой сценарий - есть сложная хранимка, в ней другие хранимки, где-то там транзакции и не одна запускается это из "квери". запустили, нажали "кенсел" и ушли пить кофе через 5 минут "общий ор" в еще более сложной ситуации в этой же квере апосля кенсела еще и "поработали" |
2 апр 15, 17:39 [17465874] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
дедлоки не висят часами, а то, что висит, в еррорлог этими флагами не запишешь |
||
2 апр 15, 17:46 [17465902] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8303 |
Вы потратите намного больше времени на поиски виновного, чем на добавление обработчика ошибок в каждую из 2000 процедур. |
2 апр 15, 18:19 [17466054] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31778 |
Или писать приложение в популярном сейчас стиле "один запрос - один коннект". |
||||
2 апр 15, 20:00 [17466478] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |