|
| ||||||||||||||||
| ||||||||||||||||
|
2008 г.
Базы данных. Вводный курсСергей Кузнецов13.3.4. Методы сериализации транзакций на основе поддержки версий объектов базы данныхОсновная идея алгоритмов сериализации транзакций, описываемых в этом разделе, состоит в том, что в базе данных допускается существование нескольких «версий» одного и того же объекта. Эти алгоритмы, главным образом, направлены на преодоление конфликтов транзакций категорий R/W и W/R, позволяя выполнять операции чтения над некоторой предыдущей версией объекта базы данных. В результате операции чтения выполняются без задержек и тупиков, свойственных механизмам синхронизационных блокировок, а также без некоторых откатов, возможных при применении метода временных меток, описанного в предыдущем подразделе. Алгоритмы управления транзакциями, основанные на поддержке версий, достаточно широко распространены в области SQL-ориентированных СУБД. В частности, подобные алгоритмы используются в СУБД Oracle и PostgreSQL. В дальнейшем в этом подразделе будем называть алгоритмы этой категории версионными алгоритмами. Версионный вариант алгоритма временных метокОдним
из наиболее старых и простых версионных алгоритмов является
версионный вариант алгоритма временных
меток (Multiversion
Timestamp
Ordering,
MVTO).
Как и в простом методе временных
меток, описанном в предыдущем подразделе, в алгоритме MVTO
порядок выполнения операций одновременно выполняемых транзакций
задается порядком временных
меток, которые получают транзакции во время старта. Временные
метки также используются для идентификации версий данных при чтении
и модификации – каждая версия получает временную
метку той транзакции, которая ее записала. Алгоритм MVTO
не только следит за порядком выполнения операций транзакций, но
также отвечает за трансформацию операций над объектами базы данных в
операции над версиями этих объектов, т.е. каждая операция
над объектом базы данных При
описании алгоритма будем использовать следующие обозначения. Как и
раньше, временную
метку, полученную транзакцией Алгоритм MVTO работает следующим образом.
Преимущества
алгоритма MVTO лучше всего иллюстрируются поведением транзакций
Транзакция
Транзакция
Итак, основными преимуществами алгоритма MVTO является отсутствие задержек и откатов при выполнении операций чтения, а основным недостатком – возможность возникновение каскадных откатов транзакций при выполнении операций записи. Кроме того, в базе данных может накапливаться произвольное число версий одного и того же объекта, и определение того, какие версии больше не требуются, является серьезной технической проблемой. Версионный вариант двухфазного протокола синхронизационных блокировокПри описании двухверсионного варианта протокола 2PL (Two-Version Two-Phase Locking Protocol, 2V2PL) будем называть текущими версиями объектов базы данных версии, созданные зафиксированными транзакциями с наиболее поздним временем фиксации; незафиксированными версиями – версии, созданные еще незавершившимися транзакциями. При следовании протоколу 2V2PL в каждый момент времени существует не более одной незафиксированной версии каждого объекта базы данных. Операции
любой транзакции
Для реализации такого поведения используются три типа блокировок:
В таб. 13.3 показаны правила совместимости этих блокировок. Таблица 9.3. Таблица совместимости «версионных» блокировок
Как видно, операция чтения может блокироваться только на время фиксации транзакции, заменяющей текущую версию требуемого объекта базы данных. Для выполнения операции записи требуется долговременная монопольная блокировка соответствующего объекта базы данных, которая, однако, в этом случае совместима с блокировкой этого же объекта по чтению (поскольку в действительности блокируются разные версии этого объекта). И, конечно, как и во всех схемах сериализации транзакций на основе блокировок, здесь возможны синхронизационные тупики. Версионно-блокировочный протокол сериализации транзакций для поддержки только читающих транзакцийВ заключение обсудим гибридный протокол, поддерживающий эффективное выполнение транзакций, не изменяющих состояние базы данных (Multiversion Protocol for Read-Only Transactions, ROMV). При применении этого протокола при образовании каждой транзакции явно указывается ее тип – только читающая (read-only) или изменяющая (update) транзакция. В только читающих транзакциях допускается использование только операций чтения объектов базы данных, а в изменяющих транзакциях – операций и чтения, и записи. Изменяющие
транзакции выполняются в соответствии с обычным протоколом 2PL,
т.е. перед выполнением операции чтения или записи объекта базы
данных Каждая
только читающая транзакция при своем образовании получает
соответствующую временную
метку. При выполнении операции чтения объекта базы данных Основным плюсом протокола ROMV по сравнению с ранее описанным протоколом 2V2PL является принципиальное отсутствие синхронизационных задержек при выполнении операций чтения только читающих транзакций. Если сравнивать ROMV с MVTO, то он выигрывает в принципиальном отсутствии откатов только читающих транзакций. Конечно, при работе изменяющих транзакций возможно возникновение синхронизационных тупиков и откатов, и здесь требуется использовать обычные методы распознавания и разрушения тупиков. Кроме того, при использовании протокола ROMV в базе данных может возникать произвольное число версий объектов. Требуется создание специального сборщика мусора, который должен удалять ненужные версии данных. Простейший сборщик мусора удаляет все неиспользуемые версии, значения временных меток которых меньше значения временной метки старейшей активной только читающей транзакции. 13.4. ЗаключениеВ этой лекции описаны основные принципы управления транзакциями в системах управления базами данных, различные методы, алгоритмы и протоколы, способствующие достижению целей управления транзакциями. Следует заметить, что существует достаточно развитая теория управления транзакциями с собственными средствами формализации постановки задач и доказательства корректности алгоритмов. Для обеспечения более простого понимания сути материала в него не включены все эти формализмы. В лекции описаны два основных подхода к сериализации транзакций – на основе синхронизационных блокировок и временных меток. У каждого из этих подходов имеются свои достоинства и недостатки, но на практике существенно больше распространен метод синхронизационных блокировок. В заключение лекции были рассмотрены расширения этих подходов с применением версий объектов базы данных. Соответствующие алгоритмы и протоколы позволяют уменьшить число потенциальных конфликтов транзакций, но для их поддержки требуются дополнительные расходы внешней памяти и усложнение общей архитектуры СУБД. |
|
CITForum © 1997–2025