Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как на 100% избежать мёртвых блокировок / 9 сообщений из 9, страница 1 из 1
19.11.2001, 13:37
    #32017267
Сашенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как на 100% избежать мёртвых блокировок
Подскажите, (please! ) как на 100% избежать мёртвых блокировок ? Т.е. как я поняла, если в некоей транзакции я обращаюсь с обновлением к табл. А, затем обновляю табл. В, то и в других транзакциях это делать следует в той же последовательности?
Кстати, читала, что SQL-2000 сам отслеживает мёртвые блокировки и откатывает ту транзакцию, которая имеет меньшую цену. Что значит меньшую цену?
Словом, есть какое-то золотое правило, как избегать мёртвых блокировок, может примерчик подкинете, а?
...
Рейтинг: 0 / 0
19.11.2001, 14:49
    #32017269
Александр Гладченко
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как на 100% избежать мёртвых блокировок
...
Рейтинг: 0 / 0
20.11.2001, 11:04
    #32017327
dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как на 100% избежать мёртвых блокировок
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
20.11.2001, 20:03
    #32017383
Сашенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как на 100% избежать мёртвых блокировок
Спасибо всем!

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


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