Управление транзакциями

Содержание

Слайд 2

Основные понятия Транзакция – это неделимая последовательность действий, переводящая базу данных

Основные понятия

Транзакция – это неделимая последовательность действий, переводящая базу данных из

одного непротиворечивого состояния в другое непротиворечивое состояние
Необходимость в достоверности и согласованности
При наличии отказов оборудования и программ
При эксплуатации БД в многопользовательской среде
От СУБД требуется
Поддержка транзакций
Поддержка параллельной обработки данных
Восстановление БД
Слайд 3

Основные понятия Свойства транзакции: Атомарность (Atomicity) Согласованность (Consistency) Изолированность (Isolation) Устойчивость (Durability)

Основные понятия

Свойства транзакции:
Атомарность (Atomicity)
Согласованность (Consistency)
Изолированность (Isolation)
Устойчивость (Durability)

Слайд 4

Основные понятия SELECT * FROM Exemplars e JOIN Readers r ON

Основные понятия

SELECT * FROM Exemplars e JOIN Readers r ON e.reader_id

= r.reader_id
BEGIN TRAN
UPDATE Exemplars SET reader_id = 2
WHERE inv = 2
SELECT * FROM Exemplars e JOIN Readers r ON e.reader_id = r.reader_id
ROLLBACK TRAN /*COMMIT TRAN*/
SELECT * FROM Exemplars e JOIN Readers r ON e.reader_id = r.reader_id
Слайд 5

Управление параллельностью Управление параллельностью выполнения транзакций – это процесс организации выполнения

Управление параллельностью

Управление параллельностью выполнения транзакций – это процесс организации выполнения различных

операций с БД, гарантирующий исключение взаимного влияния этих операций
Слайд 6

Управление параллельностью Проблемы параллельной обработки данных: Проблема потерянного обновления. Lost Updates

Управление параллельностью

Проблемы параллельной обработки данных:
Проблема потерянного обновления. Lost Updates
Зависимость от нефиксированных

результатов (Проблема «грязного» чтения). Uncommitted Dependency (Dirty Read)
Проблема несогласованной обработки (Проблема неповторяемого чтения). Inconsistent Analysis (Nonrepeatable Read)
Проблема чтения фантомов. Phantom Reads
Слайд 7

Управление параллельностью Проблема потерянного обновления. Lost Updates bal=100 T1 – снять

Управление параллельностью

Проблема потерянного обновления. Lost Updates

bal=100
T1 – снять 10
T2 – добавить

100
Ожидаемый результат: 100+100-10=190

Решение проблемы: T1 не должна читать данные до того, как они будут зафиксированы

Слайд 8

Управление параллельностью Зависимость от нефиксированных результатов (Проблема «грязного» чтения) bal=100 T1

Управление параллельностью

Зависимость от нефиксированных результатов (Проблема «грязного» чтения)

bal=100
T1 – снять

10
T2 – попытка добавить 100, но без фиксации результата
Ожидаемый результат: 100-10=90

Решение проблемы: T1 не должна читать данные до того, как они будут зафиксированы

Слайд 9

Управление параллельностью Проблема несогласованной обработки (Проблема неповторяемого чтения) bal1=100, bal2=50, bal3=25

Управление параллельностью

Проблема несогласованной обработки (Проблема неповторяемого чтения)

bal1=100, bal2=50, bal3=25
T1 –

снять 10 с bal1 и поместить в bal3
T2 – Вычислить сумму bal1, bal2, bal3 Ожидаемый результат: 175

База данных – в непротиворечивом состоянии, но sum - некорректная

Слайд 10

Управление параллельностью Проблема чтения фантомов Решение проблемы: T1 не должна удалять

Управление параллельностью

Проблема чтения фантомов

Решение проблемы: T1 не должна удалять данные до

того, как завершится T2

T1 – удалить строку из таблицы
T2 – найти сумму по столбцу P

Слайд 11

Управление параллельностью Уровни изоляции транзакций в MS SQL Server: READ UNCOMMITED

Управление параллельностью

Уровни изоляции транзакций в MS SQL Server:
READ UNCOMMITED - незавершенное

чтение. Гарантируется только физическая целостность БД. Изоляция отсутствует
READ COMMITED – Решается проблема «грязного чтения», но остается неповторяемость чтения. Это уровень изоляции по умолчанию
REPEATABLE READ – повторяемое чтение. Решается проблема неповторяемого чтения, но проблема фантомов остается. Снижается степень параллелизма
SERIALIZABLE – сериализуемость. Полная изоляция транзакций, параллельность выполнения транзакций почти исключается

Пример:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED

Слайд 12

Методы управления параллельностью Подходы: Пессимистический подход – выполнение транзакции откладывается, если

Методы управления параллельностью

Подходы:
Пессимистический подход – выполнение транзакции откладывается, если возможен конфликт

между транзакциями
Метод выявления взаимных блокировок
Метод временных отметок
Оптимистический подход – все транзакции выполняются асинхронно и после завершения транзакции принимается решение о корректности ее выполнения

Блокировка (lock) – это временно накладываемое ограничение на выполнение операции над ресурсом (ресурс – строка, столбец, таблица, БД)

Слайд 13

Методы управления параллельностью Основные типы блокировок: S-блокировка (Shared Lock) - разделяемая

Методы управления параллельностью

Основные типы блокировок:
S-блокировка (Shared Lock) - разделяемая (нежесткая) блокировка.

Запрещает изменение объекта, но чтение объекта разрешается любой транзакции. Снять блокировку может только та транзакция, которая ее установила.
X-блокировка (Exclusive Lock) – монопольная (жесткая, эксклюзивная) блокировка. Позволяет изменять объект только той транзакции, которая наложила эту блокировку. Другие транзакции не могут ни читать, ни изменять объект.
Слайд 14

Двухфазный протокол блокировки Выполнение транзакции имеет две фазы: Фаза нарастания (расширения):

Двухфазный протокол блокировки

Выполнение транзакции имеет две фазы:
Фаза нарастания (расширения): транзакция устанавливает

блокировки на необходимые ресурсы. Ресурсы не освобождаются, даже если они не будут использованы транзакцией
Фаза сжатия: транзакция только снимает блокировки с ресурсов
Слайд 15

Двухфазный протокол блокировки Решение проблемы потерянного обновления

Двухфазный протокол блокировки

Решение проблемы потерянного обновления

Слайд 16

Двухфазный протокол блокировки Решение проблемы зависимости от нефиксированных результатов

Двухфазный протокол блокировки

Решение проблемы зависимости от нефиксированных результатов

Слайд 17

Двухфазный протокол блокировки Решение проблемы несогласованной обработки данных

Двухфазный протокол блокировки

Решение проблемы несогласованной обработки данных

Слайд 18

Двухфазный протокол блокировки Решение проблемы чтения фантомов

Двухфазный протокол блокировки

Решение проблемы чтения фантомов

Слайд 19

Взаимные блокировки Взаимная блокировка (тупиковая блокировка, «мертвая» блокировка, deadlock) имеет место

Взаимные блокировки

Взаимная блокировка (тупиковая блокировка, «мертвая» блокировка, deadlock) имеет место тогда,

когда две или более транзакции находятся в бесконечном ожидании освобождения ресурса, занимаемого каждой из них

T1: bal1=bal1-10, потом bal2=bal2-10
T2: bal2=bal2+100, потом bal1=bal1+100

Слайд 20

Взаимные блокировки Двухфазный протокол блокировки не решает проблемы взаимной блокировки

Взаимные блокировки

Двухфазный протокол блокировки не решает проблемы взаимной блокировки

Слайд 21

Взаимные блокировки Msg 1205, Level 13, State 56, Procedure P2, Line

Взаимные блокировки

Msg 1205, Level 13, State 56, Procedure P2, Line 27
Transaction

(Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

ALTER PROCEDURE [dbo].[P2]
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
DECLARE @i INT
DECLARE @id INT
SET @i=1
DELETE FROM T2
WHILE @i < 1000
BEGIN
INSERT INTO T2 (data) VALUES(@i)
SET @i = @i+1
END
WHILE (SELECT COUNT(*) FROM T1) > 0
BEGIN
SET @id = (SELECT TOP 1 id FROM T1);
DELETE T1 WHERE id = @id
END
COMMIT TRAN
END

ALTER PROCEDURE [dbo].[P1]
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
DECLARE @i INT
DECLARE @id INT
SET @i=1
DELETE FROM T1
WHILE @i < 10000
BEGIN
INSERT INTO T1 (data) VALUES(@i)
SET @i = @i+1
END
WHILE (SELECT COUNT(*) FROM T2) > 0
BEGIN
SET @id = (SELECT TOP 1 id FROM T2);
DELETE T2 WHERE id = @id
END
COMMIT TRAN
END

Слайд 22

Взаимные блокировки транзакция Ti ожидает освобождения блокировки ресурса X, выставленной транзакцией

Взаимные блокировки

транзакция Ti ожидает освобождения блокировки ресурса X, выставленной транзакцией Tj

T1

T2

T3

X

Y

Y

петля

в графе – взаимная блокировка

T1

T2

X

Y

T3

Z

Слайд 23

Метод выявления взаимных блокировок Выявление взаимных блокировок: СУБД строит граф ожиданий

Метод выявления взаимных блокировок

Выявление взаимных блокировок:
СУБД строит граф ожиданий через определенные

промежутки времени
Если в графе ожидания имеются петли, то делается вывод о наличии взаимных блокировок. В петле выбирается транзакция жертва (по некоторому критерию стоимости) и происходит откат транзакции-жертвы. Петля разрывается и остальные транзакции продолжают выполнение.
Недостаток: построение графа ожиданий загружает СУБД
Слайд 24

Метод предупреждения взаимных блокировок Основная идея метода предупреждения взаимных блокировок: устанавливается

Метод предупреждения взаимных блокировок

Основная идея метода предупреждения взаимных блокировок: устанавливается порядок

выполнения транзакций на основе временных отметок ресурсов. Если попытка транзакции использовать ресурс нарушает заданный порядок, то она откатывается и перезапускается снова. В результате взаимные блокировки не могут возникнуть.
Недостатки:
Более частые откаты транзакций, чем в методе выявления взаимных блокировок
В распределенных системах сложно генерировать временные метки с отношением полного порядка
Слайд 25

Метод предупреждения взаимных блокировок Алгоритм 1. «Ожидание-отмена»: Допускается только ожидание старой

Метод предупреждения взаимных блокировок

Алгоритм 1. «Ожидание-отмена»:
Допускается только ожидание старой транзакцией. Если

более новая транзакция вынуждена ожидать освобождения блокировки, то она откатывается и запускается заново. В результате наиболее старая транзакция проходит без отката, а более новая транзакция со временем становится наиболее старой.
Алгоритм 2. «Отмена-ожидание»:
Только более новые транзакции могут ожидать заверения более старой транзакции. Если более старая транзакция вынуждена ожидать освобождения блокировки, то она откатывается.
Слайд 26

Гранулированные захваты (уровни блокировок) Уровни блокировок (выборочно): RID – блокировка отдельной

Гранулированные захваты (уровни блокировок)

Уровни блокировок (выборочно):
RID – блокировка отдельной строки (используется

ID строки)
Page – блокировка на уровне страницы
Table – блокировка таблицы
DB – блокировка базы данных
Чем крупнее элементы блокируемых данных, тем ниже уровень параллельности выполнения транзакций.

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

Слайд 27

Гранулированные захваты (уровни блокировок) Блокировки намерения: устанавливаются вверх по иерархии от

Гранулированные захваты (уровни блокировок)

Блокировки намерения: устанавливаются вверх по иерархии от блокируемого

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

Страница1

Таблица

Страница2

T1 (S)

T2 (X)

T2 (X)

не будет конфликта

будет конфликт

Слайд 28

Гранулированные захваты (уровни блокировок) S – разделяемая блокировка. Автоматически распространяет вниз

Гранулированные захваты (уровни блокировок)

S – разделяемая блокировка. Автоматически распространяет вниз по

иерархии. Устанавливается для чтения данных
X – монопольная блокировка. Автоматически распространяется вниз по иерархии. Устанавливается для изменения данных
IS – блокировка намерения для разделяемой блокировки. Автоматически распространяет вверх по иерархии.
IX – блокировка намерения для монопольной блокировки. Автоматически распространяется вверх по иерархии
SIX – разделяемая блокировка намерения для монопольной блокировки. Устанавливается явным образом на верхнем уровне иерархии при намерении читать все данные вниз по иерархии и изменять часть данных внизу иерархии. В один момент времени на ресурс может быть наложена только одна блокировка SIX.

Пример: на строку установлена X, на страницу таблицы установлена IX, а на таблицу установлена SIX. Другие транзакции могут установить на таблицу IS для чтения тех страниц, для которых не установлена IX, но установить IX или X они не могут.

Слайд 29

Гранулированные захваты (уровни блокировок) Запрашиваемая блокировка Таблица совместимости блокировок

Гранулированные захваты (уровни блокировок)

Запрашиваемая блокировка

Таблица совместимости блокировок

Слайд 30

Гранулированные захваты (уровни блокировок) T P2 P1 R1 R1 Trans1 (S)

Гранулированные захваты (уровни блокировок)

T

P2

P1

R1

R1

Trans1 (S)

IS

IS

X нельзя
S можно

X нельзя
S можно

Trans2 (IX)
можно

IX

IX

X нельзя
S

можно

Пример 1

Слайд 31

Гранулированные захваты (уровни блокировок) T P2 P1 R1 R1 Trans1 (X,

Гранулированные захваты (уровни блокировок)

T

P2

P1

R1

R1

Trans1 (X, SIX)

IX

IX

X нельзя (конфликт IX и SIX

на верхнем уровне)
S можно

X нельзя
S нельзя

Trans2 (S)
можно

SIX

IS

IS

Пример 2

Слайд 32

Управление транзакциями Явные транзакции: BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN Автоматические

Управление транзакциями

Явные транзакции:
BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN
Автоматические (по умолчанию): каждая

команда – отдельная транзакция
SET IMPLICIT_TRANSACTION OFF
Неявные транзакции: до ROLLBACK TRAN или COMMIT TRAN. Началом транзакции является одна из команд: ALTER TABLE, CREATE, DELETE, DROP, INSERT, SELECT и некоторые другие
SET IMPLICIT_TRANSACTION ON
Слайд 33

Вложенные транзакции

Вложенные транзакции

Слайд 34

Метод временных отметок

Метод временных отметок

Слайд 35

Оптимистический подход управления параллельным выполнение транзакций

Оптимистический подход управления параллельным выполнение транзакций

Слайд 36

Восстановление баз данных Восстановление базы данных – это процесс возвращения базы

Восстановление баз данных

Восстановление базы данных – это процесс возвращения базы данных

в корректное состояние, утраченное в результате отказа
Причины отказов:
Аварийное прекращение работы системы (сбой аппаратуры)
Ошибки прикладных программ
Стихийные бедствия, небрежность пользователя, диверсия
Следствия отказов:
Утрата содержимого оперативной памяти
Утрата базы данных на внешнем носителе
Слайд 37

Восстановление баз данных Задачи восстановления БД: Резервное копирование Ведение журнала транзакций

Восстановление баз данных

Задачи восстановления БД:
Резервное копирование
Ведение журнала транзакций и изменений БД
Создание

контрольных точек (перенос изменений данных во вторичную память)
Резервное копирование: сохранение базы данных целиком, либо сведений об изменениях (инкрементный режим) на автономных носителях большого объема
Слайд 38

Транзакции и восстановление Основная идея 1) Журнал используется для определения состояния

Транзакции и восстановление

Основная идея

1) Журнал используется для определения состояния транзакций на

момент сбоя
2) Журнал содержит подтверждение фиксации данных.
3) До любой попытки изменить данные, в журнал записывается это намерение, и только после этого данные изменяются. Поэтому на момент сбоя можно выявить следующие ситуации, имевшие место на момент сбоя:
изменений нет
есть запись о намерения, но изменения не выполнены
выполнено все
Слайд 39

Журнал транзакций Журнал содержит следующие записи о транзакциях: Идентификатор транзакции Тип

Журнал транзакций

Журнал содержит следующие записи о транзакциях:
Идентификатор транзакции
Тип записи (начало транзакции,

завершение транзакции, обновление данных, удаление данных, вставка данных)
Идентификатор элемента данных
Копия элемента данных ДО операции
Копия элемента данных ПОСЛЕ операции
Журнал содержит записи о контрольных точках. Контрольная точка – момент синхронизации оперативной памяти с журналом транзакций и основной областью (если фиксация). Все буферы СУБД принудительно записываются во вторичную память)

tс – контрольная точка (3-4 в час)
tf – момент сбоя
T1 – не завершена. Откат.
T2 – завершена и зафиксирована.
T3 – записана в журнал, но не полностью в основную область. Прогнать (повторно выполнить)
T4 – возможно не все данные попали в журнал. Откат
T5 – не завершена. Откат

Слайд 40

Метод восстановления с использованием отложенного обновления При использовании метода восстановления с

Метод восстановления с использованием отложенного обновления

При использовании метода восстановления с отложенным

обновлением, нормальная работа СУБД выполняется следующим образом: информация об изменениях записывается сначала в журнал транзакций, обновления не заносятся в БД до тех пор, пока транзакция не выдаст команду фиксации результатов:
1) При запуске транзакции в журнал помещается запись «начало транзакции».
2) При выполнении любой операции записи, в журнал помещается информация об операции: тип операции, идентификатор изменяемого элемента, копия элемента ПОСЛЕ операции (копия элемента до операции не используется).
3) При завершении транзакции в журнал запись «транзакция завершена»
4) Если транзакция завершена с командой фиксации результатов, то данные из оперативной памяти переносятся на диска. Если транзакция завершается с откатом транзакции, то изменения на диск не переносятся.
Через определенные промежутки времени формируются контрольные точки.
Слайд 41

Метод восстановления с использованием отложенного обновления Файл БД Файл журнала Журнал

Метод восстановления с использованием отложенного обновления

Файл БД

Файл журнала

Журнал в оперативной памяти

Транзакция

«Начало

транзакции»

«Конец транзакции»

Операции

«Начало транзакции»

«Конец транзакции»

Операции

Фиксация изменений

t1, t2, t3, t4 - требуется откат

t1

t2

t3

t4

t5

t6

«Контрольная точка»

t5, t6 - требуется прогон

Сбой

t7

t7 – результаты фиксации гарантировано на диске

Слайд 42

Метод восстановления с использованием отложенного обновления Последовательность действий при восстановлении после

Метод восстановления с использованием отложенного обновления

Последовательность действий при восстановлении после сбоя:
Журнал

просматривается в обратном направлении до последней контрольной точки.
Если для транзакции имеются обе записи «начало» «конец», то выполняется прогон транзакции. Т.е. изменения из записей об операциях переносятся в БД без повторных вычислений.
Если есть запись «начало», но нет записи «конец», то требуется откат и повторное выполнение. Откат, в данном случае, не требует никаких действий, т.к. данные в БД еще не попадали.
Если есть запись «начало транзакции» и «откат транзакции», то никакие действия не выполняются.