Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры_БД.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.03 Mб
Скачать

36, Необходимость в атомарных транзакциях

В большинстве приложений баз данных работа пользователей организована в фор­ме транзакций (transactions), известных также как логические единицы работы (logical units of work, LUW). Транзакция - это последовательность действий с базой данных, в которой либо все действия выполняются успешно, либо не вы­полняется ни одно из них (в последнем случае база данных остается без измене­ний). Такая транзакция иногда называется атомарной (atomic), поскольку она выполняется как единое целое.

Рассмотрим пример действий с базой данных, кото­рые могут потребоваться при регистрации нового заказа.

  1. Изменить запись данного покупателя, увеличив сумму к оплате.

  2. Изменить запись продавца, увеличив сумму комиссионных.

  3. Вставить в базу данных запись о новом заказе.

Предположим, что на последнем шаге нас постигла неудача – например, из-за недостатка файлового пространства. Если бы выполнены были только первые два действия, но не третье, то возникло бы недоразумение. Покупателю был бы выставлен счет за заказ, который он не получал, а продавец получил бы комиссионные за товар, который он не отправлял покупателю. Ясно, что эти три действия должны выполняться как единое целое: либо все сразу, ли­бо ни одного.

На рис. 1 и 2 приведено сравнение результатов этих действий в виде после­довательности независимых шагов (рис. 1) и в виде атомарной транзакции (рис. 2). Обратите внимание, что когда терпит неудачу одно из действий, со­ставляющих атомарную транзакцию, то изменения в базе данных не производят­ся. Также обратите внимание, что для указания рамок транзакции прикладная программа должна дать команды на начало транзакции (Start Transaction), сохра­нение транзакции (Commit Transaction) и откат транзакции (Rollback Transaction). Конкретная форма этих команд различается в разных СУБД.

Рис. 1. Последовательность в транзакциях – ошибки без использования транзакции

Рис. 2. Последовательность в транзакциях – атомарная транзакция предотвращает ошибки

П , Параллельная обработка транзакций

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

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

На рис. 3 показаны две параллельные транзакции. Транзакция пользовате­ля А считывает элемент 100, изменяет его и записывает обратно в базу данных. Транзакция пользователя В выполняет те же самые действия, но с элементом 200. Процессор обрабатывает транзакцию пользователя А, пока не произойдет прерыва­ние ввода-вывода или какая-либо иная задержка пользователя А. Тогда процес­сор переключается на пользователя В и обрабатывает его транзакцию до прихо­да прерывания, после чего операционная система передает управление обратно транзакции первого пользователя. Пользователям обработка кажется одновре­менной, но на самом деле она попеременная, или параллельная.

Рис. 3. Пример параллельной обработки запросов 2-х пользователей

37, ПАРАЛЛЕЛЬНАЯ ОБРАБОТКА ДАННЫХ: ПРОБЛЕМА ПОТЕРЯННОГО ОБНОВЛЕНИЯ, ПРОБЛЕМА НЕСОГЛАСОВАННОГО ЧТЕНИЯ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]