Изучаем sql



Pdf көрінісі
бет206/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   202   203   204   205   206   207   208   209   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )


Глава 12. Транзакции
Четвертый сценарий занимается выявлением взаимоблокировок. Взаи
моблокировка происходит, когда две разные транзакции ожидают ре
сурсов, удерживаемых другой транзакцией. Например, транзакция А
только что обновила таблицу 
account
и ожидает блокировки записи для
таблицы 
transaction
. В это время транзакция В вставила строку в таб
лицу 
transaction
и ожидает блокировки записи для таблицы 
account
.
Если случится, что обе транзакции изменяют одну и ту же страницу
или строку (в зависимости от детализации блокировок, используемой
сервером БД), каждая из них будет бесконечно ожидать, когда другая
транзакция завершит выполнение и высвободит необходимый ресурс.
Серверы БД всегда должны быть настороже и выявлять такие ситуа
ции, чтобы не остановиться полностью; при выявлении взаимоблоки
ровки выбирается одна из транзакций (произвольно или по какомуто
критерию) и осуществляется ее откат, чтобы дать возможность другой
транзакции продолжить выполнение.
В отличие от обсуждавшегося ранее второго сценария, сервер БД сфор
мирует ошибку и сообщит пользователю о том, что был сделан откат
его транзакции изза выявления взаимоблокировки. Например, при
работе с MySQL будет получена ошибка #1213, сопровождаемая сле
дующим сообщением:
Message: Deadlock found when trying to get lock; try restarting transaction
(Сообщение: Обнаружена взаимоблокировка при попытке блокировки; 
попытайтесь перезапустить транзакцию)
Как предлагает сообщение об ошибке, разумным будет повторно за
пустить транзакцию, для которой был сделан откат изза выявления
взаимоблокировки. Однако если взаимоблокировки становятся до
вольно частым явлением, вероятно, необходимо скорректировать при
ложения, осуществляющие доступ к БД, чтобы снизить вероятность
взаимоблокировок (одна общепринятая стратегия – обеспечить, чтобы
доступ к ресурсам всегда осуществлялся в одном и том же порядке, на
пример изменение данных счета выполнялось бы перед вставкой дан
ных транзакции).


Достарыңызбен бөлісу:
1   ...   202   203   204   205   206   207   208   209   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет