Методы сериализации транкзакций
Существуют два базовых подхода к сериализации транзакций: подход, основанный на синхронизационных захватах (блокировках) объектов базы данных, и подход, основанный на использовании временных меток. Суть обоих подходов состоит в обнаружении конфликтов транзакций и их устранении. Между транзакциями могут существовать следующие виды конфликтов:
· W-W – транзакция 2 пытается изменять объект, измененный не закончившейся транзакцией 1;
· R-W – транзакция 2 пытается изменять объект, прочитанный не закончившейся транзакцией 1;
· W-R – транзакция 2 пытается читать объект, измененный не закончившейся транзакцией 1.
Практические методы сериализации транзакций основывается на учете этих конфликтов. Для каждого из подходов имеются две разновидности - пессимистическая и оптимистическая. При использовании пессимистических методов (ориентированных на ситуации, когда конфликты возникают часто) конфликты распознаются и разрешаются немедленно при их возникновении (реальном или подразумеваемом). Оптимистические методы основываются на том, что результаты всех операций модификации базы данных сохраняются в рабочей памяти транзакций. Реальная модификация базы данных производится только на стадии фиксации транзакции. Тогда же проверяется, не возникают ли конфликты с другими транзакциями.
Наиболее распространенным в централизованных СУБД (включающих системы, основанные на архитектуре клиент-сервер) является подход, основанный на соблюдении двухфазного протокола синхронизационных блокировок объектов БД. В общих чертах протокол состоит в том, что перед выполнением любой операции в транзакции T над объектом базы данных r от имени транзакции T запрашивается синхронизационный захват объекта r в соответствующем режиме (в зависимости от вида операции):
совместный режим – S (Shared), означающий разделяемый захват объекта и требуемый для выполнения операции чтения объекта (иначе захват по чтению);
монопольный режим – X (eXclusive), означающий монопольный захват объекта и требуемый для выполнения операций занесения, удаления и модификации (иначе захват по записи).
Одним из наиболее чувствительных недостатков метода сериализации транзакций на основе синхронизационных захватов является возможность возникновения тупиков (deadlocks) между транзакциями. Тупики возможны при применении любого из рассмотренных вариантов.
Приведем пример возникновения тупика между транзакциями T1 и T2: транзакции T1 и T2 установили монопольные захваты объектов r1 и r2, соответственно; после этого T1 требуется совместный захват r2, а T2 - совместный захват r1. Ни одна из транзакций не может продолжаться, следовательно, монопольные захваты не будут сняты, а совместные - не будут удовлетворены. Поскольку тупики возможны, и никакого естественного выхода из тупиковой ситуации не существует, то эти ситуации необходимо обнаруживать и искусственно устранять. Разрушение тупика начинается с выбора в цикле транзакций так называемой транзакции-жертвы, т.е. транзакции, которой решено пожертвовать, чтобы обеспечить возможность продолжения работы других транзакций. Критерием выбора обычно является стоимость транзакции; жертвой выбирается самая дешевая транзакция. Стоимость транзакции определяется на основе многофакторной оценки, в которую с разными весами входят время выполнения, число накопленных захватов, их приоритет и т.д. После выбора транзакции-жертвы выполняется откат этой транзакции, который может носить полный или частичный характер. При этом освобождаются блокировки объектов и, следовательно, может быть продолжено выполнение других транзакций. Естественно, такое насильственное устранение тупиковых ситуаций является нарушением принципа изолированности пользователей, которого невозможно избежать.
Альтернативный метод сериализации транзакций, хорошо работающий в условиях редких конфликтов транзакций и не требующий введения сложных механизмов устранения типиков, основан на использовании временных меток. Основная идея метода (у которого существует множество разновидностей) состоит в следующем: если транзакция T1 началась раньше транзакции T2, то система обеспечивает такой режим выполнения, как если бы T1 была целиком выполнена до начала T2. Для этого каждой транзакции T предписывается временная метка t, соответствующая времени начала T. При выполнении операции над объектом r транзакция T помечает его своей временной меткой и типом операции (чтение или изменение). Перед выполнением операции над объектом r транзакция T1 выполняет следующие действия:
1. Проверяет, не закончилась ли транзакция T, пометившая этот объект.
2. Если T закончилась, T1 помечает объект r и выполняет свою операцию.
3. Если транзакция T не завершилась, то T1 проверяет конфликтность операций.
4. Если операции неконфликтны, при объекте r остается или проставляется временная метка с меньшим значением, и транзакция T1 выполняет свою операцию.
5. Если операции T1 и T конфликтуют, то при t(T) > t(T1) (т.е. транзакция T является более "молодой", чем T1), производится откат T, и T1 продолжает работу.
6. Если же t(T) < t(T1) (T "старше" T1), то T1 получает новую временную метку и начинается заново.
К недостаткам метода временных меток относятся потенциально более частые откаты транзакций, чем в случае использования синхронизационных захватов. Это связано с тем, что конфликтность транзакций определяется более грубо. Кроме того, в распределенных системах не очень просто вырабатывать глобальные временные метки. Но все эти недостатки окупаются тем, что не нужно распознавать и устранять тупики, реализация чего в распределенных системах стоит очень дорого.
Упражнения
6.1. Дайте краткую характеристику технологий доступа к данным Microsoft и Borland.
6.2. Что такое распределенная БД.
6.3. Что подлежит распределению в распределенной СУБД.
6.4. В чем состоит отличие архитектуры файл-сервер от архитектуры клиент-сервер.
6.5. Чем отличается удаленное представление от удаленного доступа к данным в архитектуре клиент-сервер.
6.6. Сформулируйте назначение каждой составляющей в трехярусной (трехуровневой) архитектуре БД.
6.7. Назовите преимущества и недостатки распределенных БД.
6.8. Назовите основные способы организации распределенной БД с распределенным хранением данных.
6.9. Что такое федеративная РСУБД.
6.10. Перечислите способы решения проблем совместного доступа к общим данным в многопользовательских БД.
6.11. Перечислите виды блокировок и правила их совмещения.
6.12. Какой из уровней изоляции транзакций обеспечивает максимальную изолированность пользователей: READ UNCOMMITTED (незавершенное считывание), REPEATABLE READ (повторяемое считывание), SERIALIZABLE (способность к упорядочению), READ COMMITTED (завершенное считывание).
6.13. На каком уровне изоляции транзакций может происходить неаккуратное считывание или чтение «грязных данных»: READ UNCOMMITTED (незавершенное считывание), REPEATABLE READ (повторяемое считывание), SERIALIZABLE (способность к упорядочению), READ COMMITTED (завершенное считывание).
Дата добавления: 2016-10-26; просмотров: 2456;