Выполнение транзакций в многопользовательских системах

  • Часть 1
  • | 2
  • | 3

В процессе одновременной работы нескольких пользователей с одними и теми же объектами базы данных СУБД параллельно выполняет множество транзакций. При этом могут возникнуть следующие проблемы [ 12 ]. 1. Проблема потери обновления.

Предположим, в базе данных хранится запись со сведениями о наличии на складе некоторого товара (поля Название товараКоличество, шт.):

Костюм

50

Эта запись считывается двумя пользователями. У каждого из них имеется одинаковая исходная информация, что на складе хранится 50 костюмов.

Первому пользователю необходимо отобразить в базе данных факт поступления на склад ста костюмов. Он изменяет имеющиеся данные и сохраняет обновленную запись в базе данных. Количество костюмов составляет 150 штук.

Второму пользователю требуется учесть информацию о передаче 20 костюмов со склада в магазин. Он изменяет имеющиеся у него данные и также сохраняет запись.

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

2. Проблема зависимости от незафиксированных обновлений.

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

Для иллюстрации указанной ситуации воспользуемся записью базы данных из предыдущего примера.

С помощью первой транзакции в базе данных необходимо учесть факт передачи со склада в магазин ста костюмов. Так как на складе нет такого количества товаров, очевидно, что произошел сбой. Вероятно, ошибка допущена оператором, вводившим информацию. Возможность возникновения подобной ситуации контролируется СУБД, предусматривающей отмену транзакций, приводящих к ошибочным результатам. Тем не менее временно, до завершения транзакции и последующей ее отмены, количество костюмов в исходной записи базы данных изменится и будет равно минус 50.

Выполняемая параллельно вторая транзакция учитывает поступление на склад двухсот костюмов. В итоге общее количество костюмов на складе составит 150 штук.

СУБД завершает первую транзакцию, отменяет ее и восстанавливает исходное состояние базы данных. В результате количество костюмов на складе равно 50. При этом утрачены сведения о поставке новой партии товаров.

3. Проблема несогласованного анализа.

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

предыдущаяследующая