Что такое взаимоблокировки и как с ними бороться
От: Иван Бодягин Австрия http://rsdn.ru
Дата: 25.11.03 16:13
Оценка: 844 (23) +1
Статья:
Что такое взаимоблокировки и как с ними бороться
Автор(ы): Иван Бодягин
Дата: 05.05.2004
В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.



Авторы:
Иван Бодягин

Аннотация:
В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.
Мы уже победили, просто это еще не так заметно...
Re: Что такое взаимоблокировки и как с ними бороться
От: LantY Россия icq:56949749
Дата: 26.11.03 05:22
Оценка:
Здравствуйте, Иван Бодягин, Вы писали:

ИБ>Статья:



ИБ>Авторы:

ИБ> Иван Бодягин

ИБ>Аннотация:

ИБ>В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.

Обманули
Она оказывается только в журнале.
И зачем было оглавление на сервер выкладывать?
С уважением, Дмитрий.
Re[2]: Что такое взаимоблокировки и как с ними бороться
От: lozzy  
Дата: 26.11.03 06:01
Оценка: +1
Здравствуйте, LantY, Вы писали:

LY>Обманули

LY>Она оказывается только в журнале.
LY>И зачем было оглавление на сервер выкладывать?

Шоб купили
Re[2]: Что такое взаимоблокировки и как с ними бороться
От: Merle Австрия http://rsdn.ru
Дата: 27.11.03 07:33
Оценка:
Здравствуйте, LantY, Вы писали:

LY>Обманули

LY>Она оказывается только в журнале.
LY>И зачем было оглавление на сервер выкладывать?
Завлекалочка, типа анонс.. На сайте появится месяца через два-три, а пока в журнале...
Мы уже победили, просто это еще не так заметно...
Re: Что такое взаимоблокировки и как с ними бороться
От: Barmaglot Россия  
Дата: 12.05.04 20:13
Оценка:
Здравствуйте, Иван Бодягин, Вы писали:

ИБ>В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.


А может ли возникнуть дедлок во время отката транзакции? И что делает сервер, если может?
Re[2]: Что такое взаимоблокировки и как с ними бороться
От: Sinclair Россия https://github.com/evilguest/
Дата: 13.05.04 07:05
Оценка: 2 (1)
Здравствуйте, Barmaglot, Вы писали:
B>А может ли возникнуть дедлок во время отката транзакции? И что делает сервер, если может?
Нет не может. При откате модифицируются только те объекты, которые уже были модифицированы. А поскольку сервер удерживает блокировки на модифицированных объектах до конца транзакции, то никаких новых блокировок не потребуется. Deadlock же может возникнуть только при попытке получить блокировку.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Что такое взаимоблокировки и как с ними бороться
От: Merle Австрия http://rsdn.ru
Дата: 13.05.04 07:25
Оценка:
Здравствуйте, Barmaglot, Вы писали:

B>А может ли возникнуть дедлок во время отката транзакции? И что делает сервер, если может?

Если исключить ошибки в коде сервера, то не может.
Это что касается MSSQL, DB2, Sybase ASA — про другие не знаю, но тоже вряд ли.
Хотя, например, в System/R такое было возможно, но уж как они там выкручивались — мне не ведомо...
Мы уже победили, просто это еще не так заметно...
Re[3]: Что такое взаимоблокировки и как с ними бороться
От: Merle Австрия http://rsdn.ru
Дата: 13.05.04 07:40
Оценка: 42 (1)
Здравствуйте, Sinclair, Вы писали:

S> Нет не может. При откате модифицируются только те объекты, которые уже были модифицированы. А поскольку сервер удерживает блокировки на модифицированных объектах до конца транзакции, то никаких новых блокировок не потребуется.

Хех, я тоже так думал, но все оказалось немного сложнее...

S> Deadlock же может возникнуть только при попытке получить блокировку.

Проблема в том, что в некоторых случаях, при откате приходится блокировать новые ресурсы, которые не были запрошены при нормальной работе транзакции. Например, если при откате приходится расщеплять индекс. Так что теоретически, дедлок может произойти.
Хорошая же новость заключается в том, что используемый в большинстве серверов протокол журналирования транзакций является deadlock-free в случае отката. То есть, при разработке этого алгоритма необходимость запроса новых ресурсов при откате была учтена, и если нет ошибок в коде сервера, то в случае отката вероятность дедлока исключается .
Мы уже победили, просто это еще не так заметно...
Re[4]: Что такое взаимоблокировки и как с ними бороться
От: Merle Австрия http://rsdn.ru
Дата: 13.05.04 20:21
Оценка: 51 (3)
Здравствуйте, Merle, Вы писали:

M>Хорошая же новость заключается в том, что используемый в большинстве серверов протокол журналирования транзакций является deadlock-free в случае отката.

На самом деле, по поводу большинства серверов я как всегда погорячился, зуб даю только за DB2, MSSQL и Sybase ASA...
В System/R, как я уж говорил, была подобная проблема, в DB2, до появления Мохановского алгоритма, дедлоки при откате не случались только в силу того, что минимальная гранулярность блокировок равнялась одной странице, используемый там механизм не мог гарантировать отсутствие дедлоков при откате в случае блокировки на уровне записи. Так что задачка не так тривиальна, как кажется...
Дело в том, что на одну пользовательскую транзакцию приходится серия более низкоуровневых системных транзакций, а в случае отката выполняются компенсирующие системные транзакции, которые возвращают базу в исходное состояние. Таким образом, СУБД (опять-таки зуб даю за DB2, MSSQL и ASA, но думаю, что и в большинстве других то же самое ) гарантирует не полное физическое восстановление после отката, а лишь логичское восстановление. То есть, с точки зрения клиента все данные вернутся в исходное состояние, но на самом низком уровне, вовсе не факт, что это будут те же самые данные на том же месте.
Собственно Мохан в своем докладе про Transaction Recovery Method, показал, в том числе, неэффективность и не нужность полного физического восстановления про откате. Вот.
Возвращаясь к дедлокам, Мохановский алгоритм позволяет так же разрешать подобные конфликты путем частичного отката транзакции (partial rollback), но о практических реализациях такого фокуса я не слышал, хотя может уже кто-нибудь и сделал...
Вот.
... [RSDN@Home 1.1.3 stable]
Мы уже победили, просто это еще не так заметно...
Re: Что такое взаимоблокировки и как с ними бороться
От: Аноним  
Дата: 07.04.05 09:04
Оценка:
Здравствуйте, Иван Бодягин, Вы писали:

ИБ>Статья:

ИБ>Что такое взаимоблокировки и как с ними бороться
Автор(ы): Иван Бодягин
Дата: 05.05.2004
В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.



ИБ>Авторы:

ИБ> Иван Бодягин

ИБ>Аннотация:

ИБ>В статье рассматривается проблема взаимоблокировок, даются примеры успешного создания подобных ситуаций, а также их разрешения. Материал разбирается на примере MS SQLServer 2000.


Первый "самый простой" пример- не приводит к взаимоблокировке. Чтобы получить взаимоблокировку нужно определить для таблицы tbl уникальный индекс
У меня MS SQL 2000 sp3
Re[2]: Что такое взаимоблокировки и как с ними бороться
От: Merle Австрия http://rsdn.ru
Дата: 07.04.05 10:24
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Первый "самый простой" пример- не приводит к взаимоблокировке. Чтобы получить взаимоблокировку нужно определить для таблицы tbl уникальный индекс

На самом деле, достаточно просто поменять транзакции местами. (забавно, но за все время это первый случай, когда заметили )
Ну, а дальше в статье есть объяснение почему происходит именно так, при анализе третьего примера...
... [ RSDN@Home 1.1.4 rev 302 ]
Мы уже победили, просто это еще не так заметно...
Re[3]: Что такое взаимоблокировки и как с ними бороться
От: PVitaliy Украина  
Дата: 16.10.06 15:08
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, <Аноним>, Вы писали:


А>>Первый "самый простой" пример- не приводит к взаимоблокировке. Чтобы получить взаимоблокировку нужно определить для таблицы tbl уникальный индекс

M>На самом деле, достаточно просто поменять транзакции местами. (забавно, но за все время это первый случай, когда заметили )
M>Ну, а дальше в статье есть объяснение почему происходит именно так, при анализе третьего примера...

даже не знаю как так вышло, но у меня все лочится, и должно лочится..... может 4й сервиспак на СКЛ сервер эту багу пофиксил
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.