Автор работы: Пользователь скрыл имя, 12 Мая 2012 в 19:48, курсовая работа
В данной курсовой работе затронуты проблемы, возникающие при параллельной работе, т.е. при выполнении логических единиц работы -транзакций.
Кроме этого рассмотрены современные методы и подходы для исправления и избегания данных проблем.
В практической части (Глава 3 Построение базы данных) описывается создание базы данных на примере футбольных матчей (БД «Футбольные матчи»). Данная база была построена с нуля, и в ней отображены все шаги при строительстве БД, начиная от создания таблиц и кончая сложными многотабличными формами и макросами. Имеется подробная иллюстрация различных шагов при создании этой базы данных.
Введение
2
Глава 1. Транзакции
4
1.1. Понятие и сущность транзакций
4
1.2. Двухфазная фиксация транзакций
8
Глава 2. Проблемы параллельности и их решение
12
2.1. Проблемы параллельности
12
2.2. Решение проблем параллельности
23
Глава 3. Построение базы данных
46
3.1. Разработка и создание таблиц
3.2. Создание форм
3.3. Проектирование запросов
3.4. Создание кнопочной формы
3.5. Работа с макросами
Заключение
55
Список литературы
Ниже приведена последовательность работы координатора. Для простоты примем, что транзакция в базе данных выполнена успешно, а значит, выдана общесистемная команда COMMIT, а не ROLLBACK. После получения запроса на выполнение команды COMMIT координатор осуществляет следующий двухфазный процесс.
1. Первая фаза начинается с выдачи координатором всем менеджерам ресурсов указания подготовиться к завершению транзакции "тем или иным способом". На практике это означает, что каждый участник процесса, т.е. каждый менеджер ресурсов, должен принудительно выгрузить все записи журнала регистрации для используемых транзакцией локальных ресурсов в собственный физический журнал регистрации (т.е. из первичной во вторичную энергонезависимую память). Теперь, что бы ни случилось, менеджер ресурсов будет иметь постоянную запись о работе, выполненной им в процессе обработки данной транзакции, а значит, в случае необходимости сможет зафиксировать выполненные обновления или отменить их. Если принудительная разгрузка прошла успешно, менеджер ресурсов отвечает координатору, что все "ОК". В противном случае он посылает противоположное сообщение — "Not OK".
2. Вторая фаза наступает после того, как координатор получит соответствующие ответы от всех участников. Сначала он принудительно выгружает записи о завершаемой транзакции в собственный физический журнал регистрации, фиксируя свое решение относительно этой транзакции. Если все поступившие ответы были "ОК", то координатор принимает решение глобально зафиксировать данную транзакцию. Если же поступил хотя бы один ответ "Not ОК", то для транзакции будет выполнен глобальный откат. Затем координатор каким-либо способом информирует каждого из участников транзакции о своем решении и каждый участник согласно поступившей инструкции должен или локально зафиксировать транзакцию, или выполнить ее откат. Обратите внимание, что каждый участник должен делать то, что ему велел координатор в ходе выполнения второй фазы; в этом и состоит суть данного протокола. Обратите также внимание, что именно появление записи этого решения в физическом журнале регистрации координатора и отмечает переход от фазы 1 к фазе 2.
Теперь, если система дает сбой в какой-либо точке всего этого процесса в целом, процедура перезагрузки будет искать запись о принятом решении в журнале регистрации координатора. Если она будет обнаружена, то можно будет установить, какое решение было принято до остановки, и продолжить обработку. Если подобная запись не будет обнаружена, будет принято решение об откате данной транзакции и, следовательно, процесс так или иначе завершится.
Замечание. Стоит подчеркнуть, что если координатор и участники выполняют свою работу на различных компьютерах, что типично для распределенной системы то ошибка в работе координатора может привести к тому, что некий участник достаточно долго будет ожидать поступления сведений о принятом координатором решении. В течение всего времени ожидания любое из обновлений, произведенное транзакцией в базе данных этого участника, должно быть скрыто от других транзакций[2].
Отметим, что менеджер передачи данных также может рассматриваться как менеджер ресурсов в описанном выше смысле. Это означает, что сообщения можно считать такими же восстанавливаемыми ресурсами, как и саму базу данных, а менеджер передачи данных должен быть способен участвовать в процессе двухфазной фиксации.
Глава 2. Проблемы параллельности и их решение
2.1. Проблемы параллельности
Современные СУБД являются многопользовательскими системами, т.е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу. Т.к. логической единицей работы для пользователя является транзакция, то работа СУБД должна быть организована так, чтобы у пользователя складывалось впечатление, что их транзакции выполняются независимо от транзакций других пользователей. Простейший и очевидный способ обеспечить такую иллюзию у пользователя состоит в том, чтобы все поступающие транзакции выстраивать в единую очередь и выполнять строго по очереди. Такой способ не годится по очевидным причинам - теряется преимущество параллельной работы. Таким образом, транзакции необходимо выполнять одновременно, но так, чтобы результат был бы такой же, как если бы транзакции выполнялись по очереди. Трудность состоит в том, что если не предпринимать никаких специальных мер, то данные измененные одним пользователем могут быть изменены транзакцией другого пользователя раньше, чем закончится транзакция первого пользователя[3].
Одним из способов (не единственным) обеспечить независимую параллельную работу нескольких транзакций является метод блокировок.
Работа транзакций в смеси. Транзакция рассматривается как последовательность элементарных атомарных операций. Атомарность отдельной элементарной операции состоит в том, что СУБД гарантирует, что, с точки зрения пользователя, будут выполнены два условия:
Эта операция будет выполнена целиком или не выполнена вовсе (атомарность - все или ничего).
Во время выполнения этой операции не выполняются никакие другие операции других транзакций (строгая очередность элементарных операций).
Например, элементарными операциями транзакции будут считывание страницы данных с диска или запись страницы данных на диск (страница данных - это минимальная единица для дисковых операций СУБД). Условие 2 на самом деле является именно логическим условием, т.к. реально система может выполнять несколько различных элементарных операций в один и тот же момент. Например, данные могут храниться на нескольких физически различных дисках и операции чтения-записи на эти диски могут выполняться одновременно. Элементарные операции различных транзакций могут выполняться в произвольной очередности (конечно, внутри каждой транзакции последовательность элементарных операций этой транзакции является строго определенной). Например, если есть несколько транзакций, состоящих из последовательности операций элементарных:
,
,
то реальная последовательность, в которой СУБД выполняет эти транзакции может быть, например, такой:
Набор из нескольких транзакций, элементарные операции которых чередуются друг с другом, называется смесью транзакций. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций.
Каким образом транзакции различных пользователей могут мешать друг другу?
Различают три основные проблемы параллелизма:
Проблема потери результатов обновления.
Проблема незафиксированной зависимости (чтение "грязных" данных, неаккуратное считывание).
Проблема несовместимого анализа.
Рассмотрим подробно эти проблемы.
Рассмотрим две транзакции, A и B, запускающиеся в соответствии с некоторыми графиками. Пусть транзакции работают с некоторыми объектами базы данных, например со строками таблицы. Операцию чтение строки будем обозначать , где - прочитанное значение. Операцию записи значения в строку будем обозначать .
Проблема потери результатов обновления.
Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Таблица 1. Пример потери результатов обновления.
Транзакция A | Время | Транзакция B |
Чтение | --- | |
--- | Чтение | |
Запись | --- | |
--- | Запись | |
Фиксация транзакции | --- | |
--- | Фиксация транзакции | |
Потеря результата обновления |
|
|
Результат. После окончания обеих транзакций, строка содержит значение , занесенное более поздней транзакцией B. Транзакция A ничего не знает о существовании транзакции B, и естественно ожидает, что в строке содержится значение . Таким образом, транзакция A потеряла результаты своей работы. Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.
Таблица 2. Пример проблемы незафиксированной зависимости.
Транзакция A | Время | Транзакция B |
Выборка строк, удовлетворяющих условию . | --- | |
--- | Вставка новой строки, удовлетворяющей условию . | |
--- | Фиксация транзакции | |
Выборка строк, удовлетворяющих условию . | --- | |
Фиксация транзакции | --- | |
Появились строки, которых раньше не было |
|
|
Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки.
Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты.
Собственно несовместимый анализ. Эффект собственно несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции - одна длинная, другая короткая.
Пусть на всех счетах находятся одинаковые суммы, например, по 100 условных единиц. Короткая транзакция в этот момент выполняет перевод 50 у.е. с одного счета на другой так, что общая сумма по всем счетам не меняется.
Таблица 3. Пример ошибки собственно-несовместимый анализа.
Транзакция A | Время | Транзакция B |
Чтение счета и суммирование. | --- | |
--- | Снятие денег со счета . | |
--- | Помещение денег на счет . | |
--- | Фиксация транзакции | |
Чтение счета и суммирование. | --- | |
Чтение счета и суммирование. | --- | |
Фиксация транзакции | --- | |
Сумма 250 по всем счетам неправильная - должно быть 300 условных единиц. |
|
|