ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 5424
Скачиваний: 10
106
ДЕЙСТВИЯ
РЕЗУЛЬТАТ
СЧЕТ
КЛИЕНТА
1.
Оплата
СЧЕТ
КЛИЕНТА
кредита
№
Клиента
Баланс
500 $.
№
Клиента
Баланс
КАССОВЫЙ
СЧЕТ
2.
Отказ
КАССОВЫЙ
СЧЕТ
системы
Баланс
Баланс
(
а
)
Результат
независимого
выполнения
действий
СЧЕТ
КЛИЕНТА
ТРАНЗАКЦИЯ
РЕЗУЛЬТАТ
№Клиента
Баланс
КАССОВЫЙ
СЧЕТ
Баланс
Никакие
изменения
не
сделаны
,
так
как
тран
-
закция
не
была
успешно
выполнена
(
б
)
Результат
применения
неделимой
транзакции
Рис
. 5.1.
Независимые
и
неделимые
транзакции
5.2.
Параллельная
работа
с
БД
Предположим
,
что
Лига
Женщин
-
Избирателей
(
ЛЖИ
)
из
Москвы
решила
устроить
обед
с
окороком
и
индейкой
.
Ком
-
мерческая
Палата
(
КП
)
из
Томска
решила
,
что
пришло
время
порадовать
своих
членов
обедом
с
окороками
и
ово
-
щами
.
Каждая
организация
обратилась
в
своем
городе
в
представительство
фирмы
«
Хелми
».
ЛЖИ
требует
25
окоро
-
123 ….. 1000
123 …. . 500
….…. 1500 .…
…. . 1500 …..
123 ….. 1000
.…
1.
Оплата
кредита
500 $
2.
Отказ
системы
….…. 1500 .…
Никаких
изме
-
нений
в
СЧЕТ
КЛИЕНТА
Никаких
изме
-
нений
в
КАС
-
СОВЫЙ
СЧЕТ
107
ков
,
КП
нужно
35
окороков
.
Оба
заказа
передаются
в
сис
-
тему
БД
регионального
склада
одновременно
(
рис
. 5.2).
За
-
каз
ЛЖИ
приходит
на
долю
секунды
раньше
,
чем
заказ
КП
.
ЛЖИ
Москва
КП
Томск
ЛЖИ КП
Порядок обработки ЦП
Рис
. 5.2
Пример
параллельной
обработки
Образ
инвентарной
записи
об
окороках
помещается
в
рабочую
область
компьютера
.
Запись
показывает
,
что
на
складе
есть
100
окороков
.
Но
прежде
чем
транзакция
ЛЖИ
завершается
и
инвентарная
запись
обновляется
,
транзакция
КП
также
приводит
к
созданию
в
рабочей
области
еще
од
-
ной
копии
той
же
инвентарной
записи
,
показывающей
,
что
на
складе
100
окороков
.
Обе
записи
показывают
,
что
заказ
можно
выполнить
.
Заказ
ЛЖИ
Заказ
КЛ
Хелми
(1)Чтение записи об окороках
(2)Вычитание 25 окороков
(3)Переписывание записи об
окороках
(4)Чтение записи об окороках
(5)Вычитание 35 окороков
(6)Переписывание записи об
окороках
(1)Чтение записи об окороках для ЛЖИ
(2)Чтение записи об окороках для КП
(3)Вычитание для ЛЖИ (100-25=75)
(4)Соответствующая новая запись (75)
(5)Вычитание для КП (100-35=65)
(4)Соответствующая новая запись (65)
Региональный
склад
108
ЛЖИ КП
Рис
.5.3
Простая
процедура
блокировки
Предположим
,
что
транзакция
ЛЖИ
завершена
первой
.
Пере
-
писанная
инвентарная
запись
показывает
100-25=75
окороков
,
оставшихся
на
складе
.
После
завершения
транзакции
КП
инвен
-
тарная
запись
снова
будет
переписана
,
показывая
100-35=65
окороков
на
складе
.
В
результате
на
самом
деле
получается
,
что
из
100
окороков
на
складе
продано
60,
то
есть
осталось
40,
но
запись
в
системе
показывает
,
что
их
осталось
65.
Этот
при
-
мер
отражает
основную
сущность
параллельной
обработки
.
Инвентарная запись об
окораках =100
Конец
транзакции
Вычитает 35
Инвентарная запись
об окороках=40
Конец
транзакции
Блокирует запись
БД
Запрашивает копию
записи БД
Передает копию
ЦП
Ждет разблокирование
записи
Вычитает 25
Передает копию
ЦП
Разблокирует
запись
Записывает
новые данные 75
Записывает
новые данные 40
Блокирует
запись БД
Инвентарная
запись об око-
роках=75
109
ЛЖИ КП
Бесконечное Бесконечное
ожидание ожидание
Рис
. 5.4
Схема
блокировки
,
приводящая
к
тупиковой
ситуации
Общим
способом
предупреждения
проблем
,
связанных
с
параллельной
обработкой
,
является
простая
блокировка
.
В
нашем
примере
первая
транзакция
должна
заблокировать
инвентарную
запись
об
окороках
,
т
.
е
.
запретить
доступ
к
ней
других
транзакций
(
рис
.5.3)
до
тех
пор
,
пока
обработка
первой
транзакции
не
будет
завершена
.
Когда
запись
забло
-
кирована
одним
пользователем
,
никакой
другой
пользова
-
тель
не
может
обращаться
к
ней
для
обновления
.
Предположим
,
что
и
ЛЖИ
,
и
КП
хотят
заказать
окорока
и
индеек
(
рис
.5.4).
ЛЖИ
сначала
обращается
к
инвентарной
записи
об
индейках
.
Поскольку
эта
запись
заблокирована
,
то
КП
сначала
обращается
к
инвентарной
записи
об
окороках
.
Таким
образом
,
обе
записи
заблокированы
для
доступа
дру
-
гих
пользователей
.
Затем
и
ЛЖИ
,
и
КП
заканчивают
обра
-
Ждет, пока запись
об индейках будет
разблокирована ЛЖИ
Требует блокировки
записи об индейках
Требует блокировки
записи об окороках
Запись об индейках
заблокирована
Запись об окороках
заблокирована
Требует блокировки
записи об индейках
Требует блокировки
записи об окороках
Ждет, пока запись
об окороках будет
разблокирована КП
110
ботку
записей
об
индейках
и
окороках
и
готовы
обращаться
к
другой
записи
.
Однако
ни
один
из
пользователей
не
за
-
вершил
выполнение
транзакции
,
поэтому
обе
записи
остают
-
ся
заблокированными
.
Существует
несколько
способов
справляться
с
взаимобло
-
кировкой
.
Один
подход
–
фиксировать
порядок
обращения
к
записям
.
Т
.
е
.,
если
требуется
обращаться
к
записям
А
и
В
,
то
к
ним
всегда
нужно
обращаться
именно
в
таком
порядке
.
В
нашем
примере
при
требовании
записей
об
окороках
и
индейках
можно
заставить
систему
всегда
сначала
обра
-
щаться
к
записи
об
окороках
,
а
затем
-
к
записи
об
индей
-
ках
.
Когда
ЛЖИ
закончит
обработку
,
все
записи
,
к
которым
обращались
,
будут
разблокированы
и
готовы
к
работе
КП
.
Однако
в
результате
скорость
работы
может
упасть
,
по
-
скольку
ожидание
увеличивает
время
выполнения
транзак
-
ций
.
Более
того
,
если
транзакция
слишком
долго
ожидает
разблокирования
записи
,
она
может
быть
отменена
и
ее
придется
запускать
заново
.
Обычно
все
это
приводит
к
не
-
довольству
пользователей
информационной
системой
.
Некоторые
СУБД
выполняют
детекцию
взаимоблокиров
-
ки
,
регулярно
проверяя
,
не
слишком
ли
долго
продолжается
ожидание
записи
или
ресурса
.
Другой
метод
детекции
со
-
стоит
в
том
,
что
проводится
стрелка
от
транзакции
к
иско
-
мой
записи
,
а
затем
стрелка
от
записи
к
транзакции
,
кото
-
рая
в
данный
момент
ее
использует
.
Если
граф
имеет
пет
-
ли
,
то
это
означает
,
что
обнаружена
взаимоблокировка
.
Это
показано
на
рис
. 5.5 .
ПОЛЬЗОВАТЕЛЬ
Ожидает
Ожидает
ЗАПИСЬ
БД
Используется
Используется
Рис
.5.5
Взаимоблокировка
,
обнаруженная
при
помощи
детектирующих
циклов
2
1
А
В