Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Проблемы параллельной работы транзакций



Современные многопользовательские системы допускают одновременную работу большого числа пользователей. При этом, если не предпринимать специальных мер, транзакции будут мешать друг другу. Этот эффект известен как проблемы параллелизма.

Имеются три основные следствия проблемы параллелизма:

проблема потери результатов обновления;

проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание);

проблема несовместимого анализа.

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

Под сериализаций параллельно выполняющихся транзакций понимается такой порядок планирования их работы, при котором суммарный эффект смеси транзакций эквивалентен эффекту их некоторого последовательного выполнения. Сериальный план выполнения смеси транзакций - это такой план, который приводит к сериализации транзакций. График запуска набора транзакций называется последовательным, если транзакции выполняются строго по очереди. Если график запуска набора транзакций содержит чередующиеся элементарные операции транзакций, то такой график называется чередующимся. Два графика называются эквивалентными, если при их выполнении будет получен один и тот же результат, независимо от начального состояния базы данных. График запуска транзакции называется верным (сериализуемым), если он эквивалентен какому-либо последовательному графику.

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

Одним из методов обеспечения сериальности графика запуска является протокол доступа к данным при помощи блокировок. В простейшем случае различают S-блокировки (Shared locks разделяемые) и X-блокировки (eXclusive locks монопольные). Протокол доступа к данным имеет вид:

Прежде, чем прочитать объект, транзакция должна наложить на этот объект S-блокировку.

Прежде, чем обновить объект, транзакция должна наложить на этот объект X-блокировку. Если транзакция уже заблокировала объект S-блокировкой (для чтения), то перед обновлением объекта S-блокировка должна быть заменена X-блокировкой.

Если блокировка объекта транзакцией B отвергается оттого, что объект уже заблокирован транзакцией A, то транзакция B переходит в состояние ожидания. Транзакция B будет находиться в состоянии ожидания до тех пор, пока транзакция A не снимет блокировку объекта.

X-блокировки, наложенные транзакцией A, сохраняются до конца транзакции A.

Если все транзакции в смеси подчиняются протоколу доступа к данным, то проблемы параллелизма решаются (почти все, кроме «фантомов»), но появляются тупики. Состояние тупика (dead locks) характеризуется тем, что две или более транзакции пытаются заблокировать одни и те же объекты, и бесконечно долго ожидают друг друга.

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

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

Вопросы и упражнения для самоконтроля к главе 4

Сколько версий языка SQL было принято?

Используется ли в какой-либо СУБД язык SQL в том виде, как он описан в стандарте?

Что означает символ «*» в операторе SELECT?

Как организуется вывод данных с группированием по какому-либо полю (столбцу) таблицы?

Как подсчитать число строк таблицы?

Как задаются имена столбцов, если в запросе используются несколько таблиц?

Какие виды подзапросов вы знаете и каковы ограничения при их использовании?

Что может включать предикат в предложениях WHERE и HAVING?

В каком случае запрос, содержащий конструкцию … EXISTS (подзапрос), может не вывести никаких данных?

Как выполнить объединение таблиц?

Какие действия выполняет оператор DELETE без фразы WHERE?

Какими способами можно заполнить созданную таблицу данными?

Как организовать перерасчет значений каких-либо столбцов таблицы?

Напишите оператор создания таблицы Товары с указанием значений по умолчанию и условий проверки данных в некоторых полях.

Как задать составной первичный ключ при создании таблицы?

Для чего нужны представления?

Как определяются модифицируемые представления?

Что показывает фраза WITH CHECK OPTION при создании представлений?

Что понимается под привилегиями языка SQL и как они передаются?

Что такое транзакция в БД и как она задается?

В чем заключается проблема параллелизма?





Дата публикования: 2014-11-19; Прочитано: 1368 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...