Скачиваний:
29
Добавлен:
11.04.2015
Размер:
171.01 Кб
Скачать

10. Метод двухфазной фиксации блокировок.

Параллельное выполнение транзакций должно приводить к корректным результатам, фиксируемым в базе данных. Корректность этих результатов состоит в том, что они должны совпадать с результатами, получаемыми при последовательном выполнении транзакций. Такая схема обработки позиционируется как сериализуемая, а соответствующий план выполнения транзакций является сериализуемым. Отказ от применения процедур управления параллельным выполнением приводит к множеству различных планов среди которых имеются несериализуемые.

Пример. Предположим, что сформированы три транзакции R1, R2 и R3

BEGIN TRAN R1

x= 1; х = 2х; COMMIT TRAN R1

BEGIN TRAN R2

x= 1; х = 4х;

COMMIT TRAN R2;

BEGIN TRAN R3

x= 1; х = 6x;

COMMIT TRAN R3;

Существуют различные сериализуемые планы:

план 1 -Rl,R2,R3: результат x = 6

план 2 -Rl,R3,R2: результат x = 4

план 3 R2,R3,R1: результат x = 2

план 4 R2,R1,R3: результат x = 6

план 5 R3,R2,R1: результат x = 2

план 6 R3,R1,R2: результат x = 4

Приведенные планы соответствуют так называемым последовательным графикам. Известно, что график - это порядок запуска операций множества параллельно выполняемых транзакций, сохраняющий очередность выполнения операций в каждой отдельной транзакции. Последовательный график - это график, в котором операции каждой из транзакций вы­полняются строго по порядку и они не чередуются с операциями, выполняемыми в других тран­закциях. Отличие непоследовательного графика заключается в том, что в нем допускается чередование операций, входящих в одновременно выполняемые транзакции. График для сериализуемого плана имеет следующий вид:

график 1 : x =1,х = 2х, х= 1, x = 4 x,х = 1, x = 6 x. Результат x = 6.

Примером несериализуемых графиков являются следующие:

график 2: x = 1,х = 1,х = 2х, х= 1, x = 4 x, x = 6 x. Результат x = 24;

график 3 : x = 1, x = 4x, x = 1, x = 1 , x = 2 x, x = 6x. Результат x = 12.

Известно, что основу управления параллельно выполняемыми транзакциями составляет корректное планирование конфликтующих операций. К таким операциям относятся операции, которые обращаются к одному и тому же элементу данных и, как минимум, одна из них - операция записи. Для синхронизации конфликтующих операций чтения и записи традиционно применяются двухфазная блокировка и ме­ханизм явного упорядочения операций по отметкам времени. Стратегия двухфаз­ной блокировки заключается в том, что транзакции разрешается устанавливать блокировки по мере необходимости, но после снятия любой из активных блокиро­вок запрещается наложение новых блокировок. Эта стратегия базируется на реали­зации следующих правил:

при инициировании операции доступа к данным проверяется наличие кон­фликта с другими транзакциями. Если конфликт существует, то выполнение опера­ции доступа откладывается и транзакция переходит в состояние ожидания;

блокировка не может быть снята с элемента данных, если с ним осуществля­ется операция ввода-вывода;

после снятия блокировки, установленной транзакцией Rl, СУБД не может установить для этой транзакции новой блокировки, даже если доступ производится к другому элементу данных.

Для каждой транзакции выделяются две фазы: фаза подъема, на которой выполняется установление блокировок, и фаза спада, на которой осуществляется снятие блокировок (рис. 6.7).

В промышленных СУБД реализуется модификация двухфазной блокировки, предполагающая установление необходимых блокировок на первой фазе и снятие всех блокировок при выполнении оператора фиксации транзакции COMMIT либо оператора отката ROLLBACK.

Соседние файлы в папке ответы