Возможны два вида блокировок [ 2 ]:
1. Монопольная блокировка (X-блокировка, eXclusive locks).
В этом режиме объект базы данных, заблокированный некоторой транзакцией, может изменяться и удаляться только этой транзакцией, он недоступен для любых действий (включая чтение), выполняемых другими транзакциями.
2. Блокировка с взаимным доступом (S-блокировка, Shared locks).
Эта блокировка позволяет обращаться к объекту базы данных одновременно нескольким транзакциям, но только в режиме чтения (обновление и удаление информации запрещены).
Если транзакция обращается к объекту, к которому применена блокировка, она переходит в состояние ожидания момента снятия блокировки с этого объекта (исключением является ситуация, когда выполняемые транзакции предусматривают только чтение данных). Поэтому использование механизма блокировок приводит к задержке выполнения транзакций, следовательно, замедляет работу с базой данных.
Блокировки могут привести к возникновению тупиковых ситуаций. Предположим, первая транзакция в монопольном режиме блокирует объект А базы данных. Одновременно вторая транзакция в монопольном режиме блокирует объект В базы данных. Если затем первая транзакция пытается обратиться к объекту В, а вторая к объекту А, обе транзакции переходят в состояние бесконечного ожидания, так как они будут безрезультатно ждать прекращения выполнения другой транзакции и снятия блокировки с нужных им объектов.
Во время работы с базой данных может сложиться ситуация, когда при одновременном выполнении большого количества транзакций возникает множество тупиков. Эта ситуация разрешается непосредственно средствами СУБД. Из общей совокупности выполняемых транзакций выбираются и отменяются полностью или частично транзакции, которыми можно и нужно пожертвовать для устранения тупиков и продолжения работы других транзакций. Выбор транзакции для отката определяется многофакторным критерием, включающим приоритет и время выполнения транзакции, количество блокированных ею объектов.
предыдущаяследующая тема