powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как на 100% избежать мёртвых блокировок
9 сообщений из 9, страница 1 из 1
Как на 100% избежать мёртвых блокировок
    #32017267
Фотография Сашенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, (please! ) как на 100% избежать мёртвых блокировок ? Т.е. как я поняла, если в некоей транзакции я обращаюсь с обновлением к табл. А, затем обновляю табл. В, то и в других транзакциях это делать следует в той же последовательности?
Кстати, читала, что SQL-2000 сам отслеживает мёртвые блокировки и откатывает ту транзакцию, которая имеет меньшую цену. Что значит меньшую цену?
Словом, есть какое-то золотое правило, как избегать мёртвых блокировок, может примерчик подкинете, а?
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017269
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017327
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Сашенька: Пример:
А) Тут возможна мертвая блокировка:
транзакция 1)
.....
update table1 set field1=1
update table2 set field2=1
......

транзакция 2
......
update table2 set field1=1
update table1 set field2=1
......

Б) А тут - нет
.....
update table1 set field1=1
update table2 set field2=1
......

транзакция 2
......
update table1 set field1=1
update table2 set field2=1
......

Т.е. как Вы и сказали - нужно делать запрос ресурсов в одинаковой последовательности, чтобы не получилось, что одна из транзакций ждет освобождения ресурса (таблицы например), заблокированного второй транзакцией, а вторая в это время ждет освобождения ресурса заблокированного первой.

Для установки приоритета транзакции при деадлоке используйте (внутри транзакции)
SET DEADLOCK_PRIORITY { LOW | NORMAL | @deadlock_var }
Если уровень приоритета двух транзакций попавших в деадлок одинаков, то выбор транзакции для отката будет сделан случайным образом.
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017383
Фотография Сашенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!

И всё же, возможны ещё какие случаи возникновения мёртвых блокировок?
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017397
При применении хинта HOLDLOCK или увеличении уровня транзакции до повторяемого чтения или сериализации, вероятность получения дидлоков резко возрастает. Другими словами, если не делать ни того, ни другого, а с транзакциями работать аккуратно и только по минимальной необходимости, то беспокоиться о дидлоках скорее всего не придется.
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017400
Screem6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У нас было и до сих пор появляется некоторое количество deadlock-ов регулярно в старых приложениях. В новых используется явное указание типа захвата, мы используем захват таблицы TABLOCK, например,
INSERT имя_таблицы (список_полей) WITH (TABLOCK) - больше информации о deadlock-ах я не встречал в этих приложениях
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017417
Еще бы! Вы превратили свою базу в однопользовательскую на запись. Какой дидлок может быть в однопользовательской системе?!
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017570
Screem6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот и чудно никаких и нет, потому как до этого они сыпались каждые десять минут, нынешняя ситуатция всех вполне устраивает.
...
Рейтинг: 0 / 0
Как на 100% избежать мёртвых блокировок
    #32017619
Фотография Слон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле - deadlocks - не такая уж и большая проблема. Если после всей оптимизации они все таки возникают - то приложение просто должно обрабатывать ошибку, генерируемую deadlock'ом и попросту перезапускать транзакцию.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как на 100% избежать мёртвых блокировок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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