- •Модели транзакций
- •Автоматическое выполнение транзакций
- •Управляемое выполнение транзакций
- •Использование журнала транзакций
- •Параллельное выполнение транзакций
- •Параллельное выполнение транзакций
- •Взаимная блокировка транзакций
- •Пример графа ожидания транзакций
- •Уровни изолированности пользоваелей
- •Уровни изолированности пользоваелей
- •Гранулированные синхронизационные захваты
- •Таблица совместимости блокировок
Модели транзакций
Атомарность – транзакция должна быть выполнена полностью или не выполнена вообще
Согласованность – при выполнении транзакции БД переходит из одного согласованного состояния в другое согласованное состояние
Свойства транзакций
Изолированность – транзакции физически обрабатываются последовательно
Долговечность – изменения в БД не могут быть потеряны ни при каких обстоятельствах
Автоматическое выполнение транзакций
Исходное |
Исходное |
Состояние БД |
Состояние БД |
INSERT |
INSERT |
UPDATE |
UPDATE |
DELETE |
DELETE |
UPDATE |
UPDATE |
COMMIT |
ROLLBACK |
Новое Состояние БД
Управляемое выполнение транзакций
Исходное Состояние БД
BEGIN TRANSACTION
UPDATE
SAVE TRANSACTION A
Промежуточное
Состояние БД INSERT
RLOBACK A
UPDATE |
|
COMMIT TRANSACTION |
Новое |
|
Состояние БД |
Использование журнала транзакций
|
|
|
|
|
|
Выполнение оператора |
|
|
|
|
|
|
ROLLBACK |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Индивидуальный |
|
|
Аварийное завершение |
|
|
|
откат |
|
|
программы |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Принудительный откат |
|
|
|
|
|
|
при блокировке |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выключение |
|
|
|
|
|
|
электропитания |
|
|
|
|
|
|
|
Восстановление |
|
|
Мягкий сбой |
|||
|
|
|
|
|
||
|
|
|
|
|
||
данных |
|
|
|
|
|
|
|
|
|
|
Сбой процессора |
||
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Жесткий сбой |
|
Отказ носителя |
|
|
внешней памяти |
|
|
|
|
|
|
|
|
|
Параллельное выполнение транзакций
Типы несогласованности данных
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пропавшие |
|
Несогласованные |
|
|
Промежуточные |
|
Строки-фантомы |
||||||
обновления |
|
|
данные |
|
|
данные |
|
||||||
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Принципы сериализации транзакций
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пользователь не должен видеть |
|
|
Гарантированное обеспечение |
||||
несогласованных данных |
|
|
принципа независимого |
||||
|
|
|
|
|
выполнения транзакций |
||
|
|
|
|||||
Параллельное выполнение транзакций
Конфликты между двумя транзакциями
|
|
|
|
|
|
W-W – одна транзакция пытается |
|
|
R-W – одна транзакция пытается |
||
изменить объект, измененный |
|
|
изменить объект, открытый для чтения |
||
другой незакончившейся транзакцией |
|
|
другой незакончившейся транзакцией |
||
|
|
|
|
|
|
|
|
|
|
|
|
W-R – одна транзакция пытается читать объект, открытый для чтения другой незакончившейся транзакцией
Типы
блокировок
S (Shared) - разделяемая или совместная блокировка. Один и
тот же объект данных может быть доступен сразу
нескольким транзакциям, но только в режиме чтения
X (eXclusive) - эксклюзивная или монопольная блокировка. Объект доступен только единственной транзакции
Взаимная блокировка транзакций
Транзакция 1 |
|
|
|
Объект 1 |
|
|
|
Объект 2 |
|
|
|
|
Транзакция 2 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Select O1 |
|
|
S-блокировка |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
X-блокировка |
|
|
|
Update O2 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Update O1 |
|
|
X-блокировка |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ожидание |
|
|
Update O1 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Update O2 |
|
|
Ожидание |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Взаимная блокировка - тупик
Пример графа ожидания транзакций
Транзакция
1 
3 |
4 |
5 |
6 |
2
7
8
Транзакция 3 ждет завершения работы транзакции 4
Наличие циклической конструкции – признак тупиковой ситуации
Уровни изолированности пользоваелей
Serializable
Repeatable read
Полная изолированность транзакций. Максимальная степень целостности данных. Каждая транзакция выполняется изолированно.
Отказ доступа к промежуточным или окончательным результатам других транзакций
Read commited
Tранзакция не имеет доступа к промежуточным результатам других транзакций
Допускается выполнение запроса вне зависимости от того, Read uncommited
были зафиксированы результаты параллельных
транзакций или нет
Уровни изолированности пользоваелей
Уровень изолированности 
Serializable
Repeatable read
Read commited
Read uncommited 
|
Проблема |
|
|
Пропавшие |
Промежуточ |
Несогласован |
Строки- |
обновлеия |
ные данные |
ные данные |
фантомы |
Не |
Не возникает |
Не |
Не |
возникает |
|
возникает |
возникает |
Не |
Не возникает |
Не |
Сохраняется |
возникает |
|
возникает |
|
Не |
Не возникает |
Сохраняется |
Сохраняется |
возникает |
|
|
|
Не |
Сохраняется |
Сохраняется |
Сохраняется |
возникает |
|
|
|
