- •Лекция 7
- •2.4. Восстановление распределенных баз данных
- •2.4.1 Распределенные протоколы восстановления
- •2.4.2. Двухфазная фиксация транзакций (2рс)
- •20.4.4. Трехфазная фиксация транзакций (зрl)
- •2.5. Оптимизация распределенных запросов
- •2.5.1. Эвристический подход к оптимизации запросов
- •А)Правила преобразований операций реляционной алгебры
2.4.2. Двухфазная фиксация транзакций (2рс)
Как следует из названия данного протокола, фиксация результатов транзакций выполняется в два этапа: этап голосования и принятия решения . Основная идея состоит в том, что координатор должен опросить всех участников, готовы ли они к фиксации транзакции. Если хотя бы один из участников потребует отката или не ответит на запрос в пределах установленного тайм-аута, координатор укажет всем участникам на необходимость выполнить откат данной транзакции. Глобальное решение должно быть принято всеми участниками. Если некоторый участник требует отката транзакции, то он имеет право выполнить его немедленно. Фактически любой сайт имеет право откатить свою субтранзакцию в любое время, вплоть до того момента, пока он не пошлет согласие на ее фиксацию. Подобный тип отката называют односторонним откатом, Если участник проголосовал за фиксацию транзакции, то он должен ожидать до тех пор, пока координатор не пошлет широковещательное сообщение либо о глобальной фиксации, либо о глобаль* ном откате этой транзакции. Данный протокол предполагает, что каждый сайт имеет свой собственный локальный журнал и с его помощью может надежно откатить или зафиксировать транзакцию. Двухфазный протокол фиксации транзакций включает этап ожидания сообщения от других сайтов. Во избежание нежелательных блокировок процессов система использует механизм обнаружения тайм-аута. Для фиксации глобальной транзакции координатор выполняет следующую процедуру.
20.4.4. Трехфазная фиксация транзакций (зрl)
Выше уже отмечалось, что двухфазный протокол не является неблокирующим, поскольку при его использовании возможны ситуации, когда некоторый сайт остается в заблокированном состоянии. Например, процесс, зафиксировавший тайм-аут после отправки своего согласия на фиксацию транзакции, но так и не получивший глобального под* тверждения от координатора, остается в заблокированном состоянии, если может взаимодействовать только с сайтами, которые также не имеют сведений о принятом глобальном решении. На практике вероятность блокирования процесса достаточно мала, поэтому в большинстве существующих СУРБД используется именно протокол двухфазной фиксации транзакций. Тем не менее был предложен альтернативный неблокирующий протокол, получивший название протокола трехфазной фиксации транзакций (Зкееп, 1981). Трехфазная фиксация является неблокирующей в отношении отказов сайтов, за исключением случая одновременного отказа всех сайтов. Однако отказы линий связи могут привести к тому, что на различных сайтах будут приняты разные решения, что будет иметь следствием нарушение свойства атомарности глобальной транзакции. Для использования этого протокола необходимо выполнение следующих условий.
Расчленение сети не должно иметь места.
По крайней мере один сайт всегда должен быть доступен.
Самое большее К сайтов сети могут отказать одновременно.
Основная идея протокола трехфазной фиксации состоит в устранении неопределенного периода ожидания, в который попадают участники после подтверждения своего согласия на фиксацию транзакции и до получения от координатора извещения о глобальной фиксации или глобальном откате. В трехфазном протоколе фиксации вводится третья фаза, называемая предфиксацней, помещаемая между фазами голосования и принятия глобального решения. После получении результатов голосования от всех участников координатор рассылает глобальное сообщение РКЕ-СОМШ. Участник, который получил глобальное извещение о предфиксации, знает, что все остальные участники проголосовали за фиксацию результатов транзакции и что со временем сам этот участник определенно выполнит фиксацию транзакции, если не произойдет отказ. Каждый участник подтверждает получение сообщения о предфиксации. После того как координатор получит все эти подтверждения, он рассылает команду глобальной фиксации транзакции. Если некоторый участник потребовал отката транзакции, то обработка этой ситуации выполняется точно так же, как в протоколе двухфазной фиксации.
Модифицированные варианты диаграмм состояния для координатора и участника показаны на рис. 20.10, Как координатор, так и участник по-прежнему попадают в состояние ожидания, однако главная особенность состоит в том, что все функционирующие процессы были информированы о глобальном решении зафиксировать транзакцию посредством отправки сообщения РНЕ-СОКМТТ отце до того, как первый процесс выполнит фиксацию результатов транзакции, что позволяет участкам действовать независимо друг от друга в случае отказа.