Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы лвс.docx
Скачиваний:
142
Добавлен:
06.03.2016
Размер:
1.43 Mб
Скачать

31. Стратегии обработки транзакций

На данный момент широко известны следующие стратегии обнаружения и разрешения конфликтов при параллельной работе транзакций.

Оптимистическая стратегия. Основным предположением является то, что любая транзакция T, как правило, работает «одна» и никакая другая транзакция T’ не изменяет ни множество чтения, ни множество записи транзакции T до момента ее фиксации. Все конфликты чтения/записи, ограничения целостности проверяются в момент фиксации транзакции T. Транзакция T фиксируется в том и только в том случае, когда от момента ее старта и до момента ее фиксации отсутствовали описанные выше конфликты с любой другой параллельной транзакцией T’. Во всех остальных случаях транзакция T откатывается.

При таком протоколе работы транзакция T не блокирует каким-либо образом объекты данных, к которым она обращается.

Особенности этого протокола — долгая фиксация (проверки ограничений целостности и наличия конфликтов, перенос данных в базу данных) и быстрая работа при выполнении действий над данными в течение работы транзакции (ничто не блокируется, ничто не проверяется).

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

Пессимистическая стратегия. Основное предположение состоит в том, что T работает параллельно с другими транзакциями, и они ей «мешают». Другими словами, как правило, найдется хотя бы одна транзакция T’, которая изменяет множество чтения и (или) множество записи транзакции T до момента ее фиксации. Все конфликты чтения/записи, ограничения целостности проверяются в процессе работы транзакции T.

При таком протоколе работы транзакция T каким-либо образом блокирует объекты данных, к которым она обращается, предотвращая тем самым запись другими транзакциями объектов, блокированных на чтение и любых действий других транзакций над объектами, блокированными на запись.

Особенности этого протокола — быстрая фиксация (проверки ограничений целостности и наличия конфликтов при выполнении операции COMMIT отсутствуют) и медленная работа при выполнении действий над данными в течение работы транзакции (в процессе работы объекты блокируются, проверяются все ограничения).

Такой протокол требует наличия механизма блокировок, которые накладываются на объекты данных перед выполнением операции и удерживаются или не удерживаются до стадии фиксации транзакции. Для хранения блокировок требуются дополнительные ресурсы, но наиболее дорогой составляющей частью механизма является проверка блокировок — не заблокирован ли уже тот объект, который собирается блокировать транзакция в данный момент времени. Также необходим компонент обнаружения и разрешения взаимных блокировок (deadlock).

Протокол хорошо работает, когда множества чтения и записи коротких и длинных транзакций пересекаются: длинные транзакции фиксируются и вынуждены ожидать только фиксации коротких транзакций. При разрешении конфликтов по факту их возникновения процент откатов коротких транзакций будет гораздо ниже, чем при использовании оптимистической стратегии («дешевле ждать, чем откатываться»). В этом состоит существенное преимущество раннего обнаружения конфликтов; откаты же возможны только при возникновении взаимных блокировок. Но если прикладные задачи построены так, что множества чтения и записи разных транзакций пересекаются редко, то протокол не дает существенного выигрыша в производительности из-за присутствия проверок взаимодействий с другими транзакциями в процессе работы транзакции.

Спекулятивная стратегия. Основное предположение состоит в том, что транзакция Т работает параллельно с другими транзакциями, потенциальные конфликты распознаются в процессе работы, как только они возникают, но обнаружение таких конфликтов не влечет ни задержку выполнения таких транзакций (как при пессимистической стратегии) ни откат (как при оптимистической стратегии).

Операции записи объекта данных х никогда не производятся «вслепую», т. е. без предварительного чтения объекта х. Операция записи происходит над локальной копией объекта х в рабочем пространстве транзакции Т, и результат операции становится видимым для других транзакций только после фиксации Т.

Если какая-либо транзакция T’, выполняющаяся параллельно с T, читает объект х, то образуется теневая копия транзакции T’ — T’’. Транзакция T’ продолжает выполняться в предположении, что она успеет зафиксироваться раньше, чем транзакция Т. В этом случае нет смысла откатывать Т, как это было бы сделано при оптимистической стратегии (T’ отработала так, как если бы она полностью завершилась до начала T).

Если же транзакция Т фиксируется раньше Т’, то вместо выполнения полного отката T’, эта транзакция заменяется своей «тенью» T’’, а выполнение транзакции продолжается этой тенью в точности так, как если бы транзакция Т стартовала и зафиксировалась бы перед стартом T’.

Основная идея спекулятивного протокола — поддерживать достаточное число теней, чтобы обеспечить возможность продолжения любой транзакции с момента образования ее теневой копии, а не производить ее полный рестарт.

Такой протокол используется для систем реального времени. Различные варианты реализации предполагают образование не больше чем n теней, ограничивая тем самым объем ресурсов, требуемых для выполнения транзакции.