Similar presentations:
Управление транзакциями и блокировками. Модуль 12
1. Управление Транзакциями и Блокировками
Модуль 122. Темы:
Обзор Транзакций и БлокировокЖурнал транзакций
Управление Транзакциями
Управление Блокировками
3. Обзор транзакций и блокировок
С помощью транзакций и блокировок SQLServer обеспечивает согласованность и
целостность всех БД, несмотря на
возникающие в системе ошибки.
Транзакция – это логическая единица
работы, состоящая из набора операторов,
таких, как SELECT или UPDATE.
Блокировки предотвращают конфликты,
запрещая пользователям чтение или
модификацию данных, находящихся
в процессе изменения другими пользователями
или
под влиянием незавершенных транзакций
4. Транзакции
Транзакция – последовательность задач, всовокупности составляющих логическую
единицу работы
Любая операция DML –
SELECT, INSERT, UPDATE, DELETE
- является транзакцией
Транзакция SQL завершается одной из двух
инструкций:
COMMIT – действие всех ее инструкций
подтверждается после отправки на диск
ROLLBACK – откат, т.е. отмена действия всех ее
инструкций, БД возвращается в состояние перед
началом транзакции
5. Свойства транзакции (ACID)
Атомарность – в конце транзакции все еемодификации либо исполняются
(регистрируются), либо отменяются
Целостность (согласованность) –
транзакция не должна нарушать
целостность БД
Изолированность – каждая транзакция
должна быть отделена от эффекта других
транзакций
Устойчивость (живучесть) – постоянство
транзакции независимо от системных сбоев
6. Основы Транзакций
Транзакция:• последовательность операций, выполненных как
одна логическая единица работы
•должна обладать четырьмя свойствами (ACID)
• Atomicity (Атомарность)– должны быть выполнены
либо все входящие модификации, либо ни одна из них
• Consistency (Согласованность) - должна оставить все
данные в согласованном состоянии
A
C
• Isolation (Изоляция) - должны быть изолированы от
любых модификаций других транзакций
I
• Durability (стойкость, живучесть) – произведенные ею
действия сохраняются даже в случае системного сбоя
D
7. Сбои транзакций
Изоляция между транзакциями можетбыть далеко не совершенной, и это
может проявляться несколькими
способами:
"грязное" чтение,
неповторяющееся чтение и
призрачные строки.
Все эти нарушения могут потенциально
повлиять на целостность транзакций.
8. Проблемы с параллельным выполнением
Потерянные или «скрытые»обновления
Зависимость от незафиксированных
данных («грязное чтение»)
Несогласованный анализ
(неповторяемое чтение)
Чтение фантомов
9. Потерянные или «скрытые» обновления
Появляются при выборе одной строкидвумя или более транзакциями,
которые затем обновляют эту строку
на основе ее первоначального
значения:
Последнее обновление записывается
поверх обновлений, сделанных
другими транзакциями
10. Зависимость от незафиксированных данных («грязное чтение»)
Возникает, когда вторая транзакциявыбирает строку, которую в это время
обновляет первая транзакция:
Вторая транзакция читает еще не
зафиксированные данные, которые
могут быть изменены первой
транзакцией
11. Несогласованный анализ (неповторяемое чтение)
Вторая транзакция несколько разобращается к той же строке, что и
первая транзакция, однако от раза к
разу данные меняются:
Происходит многократное чтение
второй транзакцией одной и той же
строки с разными данными
12. Чтение фантомов
Строки из диапазона строк, читаемогово время транзакции, добавляются
или удаляются
13. Что такое уровни изоляции транзакций?
• Уровни изоляции транзакций контролируют• Применение и типы блокировки при чтении данных
• Время удержания блокировок чтения
• Использование операции чтения ссылок на строки,
измененные другой транзакцией
• Выбор уровня изоляции транзакции не влияет на
блокировки, для защиты данных от модификаций
• Уровни - READ UNCOMMITTED, READ COMMITTED,
REPEATABLE READ, SERIALIZABLE и SNAPSHOT
Syntax
SET TRANSACTION ISOLATION LEVEL <level>;
14. Уровни изоляции ANSI SQL-92
СпособностьОтбор
видеть
предложением
Возможность
видеть
Уровень
«грязное
Неповторяющееся
подтвержденные
WHERE
дополнительных
неподтвержденные
изоляции
чтение»
чтение другой
изменения другой
строк, внесенных
изменения другой
транзакции транзакции транзакции
Призрачные
строки
1/ Read Uncommited
(наименее жесткий)
допустимо
допустимо
допустимо
2/ Read Commited
(принят в SQL
по умолчанию)
запрещено
допустимо
допустимо
3/ Repeatable Read
запрещено
запрещено
допустимо
4/ Serializable
(наиболее жесткий)
запрещено
запрещено
запрещено
Snapshot
запрещено
запрещено
допустимо
Read Commited
Snapshot
запрещено
допустимо
допустимо
15. Что Такое Блокировки?
• Это механизм синхронизации доступа несколькихпользователей к данным в то же время
• Два основных типа блокировки:
Read locks – Разрешить другим пользователям читать, но
не писать
Write locks – блокировать других от чтения или записи
• Может происходить Взаимоблокировка
• Блокировки предотвращения конфликтов обновления
Блокировка гарантирует, что транзакции сериализуются
Блокировка является автоматической
Блокировка позволяют одновременное использование
данных
16. Параллельное выполнение
• ОптимистическоеИспользуется, если конфликты из-за ресурсов возможны,
но МАЛОВЕРОЯТНЫ
Допускается выполнение явных транзакций без
блокирования каких-либо ресурсов
Проверка ресурсов на предмет возникновения
конфликтов выполняется только при попытке изменения
данных
• Пессимистическое
Операции считывания используют блокировку
считывания, запрещающую изменение данных
Другие пользователи блокируются до тех пор, пока
блокировка освобождается
Гарантируется успешное завершение транзакции, если не
возникнет ВЗАИМОБЛОКИРОВКА
17. Журнал транзакций
Все транзакции и модификациирегистрируются в журнале транзакций:
вначале осуществляется запись в
журнал транзакций, а затем в файл
данных (упреждающая регистрация
транзакций)
18. Логическая структура журнала транзакций
Последовательный набор записейКаждая запись идентифицируется порядковым
номером в журнале – log sequence number, LSN
Записи журнала хранятся в порядке их
создания
Каждая запись журнала помечена
идентификатором транзакции, которой она
принадлежит
Все записи журнала, ассоциированные с одной
транзакцией, - двунаправленный список
При откате все исполняемые операторы тоже
регистрируются
19. Логическая структура журнала транзакций
В журнале транзакций регистрируются:Начало и конец каждой транзакции
Каждая модификация данных (добавление,
обновление, удаление)
Выделение и освобождение каждого
экстента
Создание и удаление таблицы или индекса
В записях журнала о модификациях регистрируются
логические операции или образы модифицированных
данных до и после модификации (копии данных до и
после операции)
20. Физическая структура журнала транзакций
Располагается в одном илинескольких физических файлах БД
21. Контрольные точки
Регистрируются в файле журналаотметкой начала контрольной точки
В контрольных точках выполняется
сброс измененных страниц данных и
журнала из кэш-буфера текущей БД
22. Восстановление журнала транзакций
Если в журнале содержатся какие-либо операции DML, которые не были
подтверждены, они откатываются.
Если в журнале транзакций
существуют записи об операциях
DML, которые подтверждены, но не
отмечены как записанные в файл
данных, они будут записаны в файл
данных при восстановлении.
23. Восстановление транзакций
Необходимое действиеНе требуется
1
Накат
2
Откат
3
Накат
4
5
Контрольная точка
сбой системы
Откат
24. Управление транзакциями
Запуск транзакций:можно запускать транзакции в экземпляре компонента
SQL Server Database Engine как явные, автоматически
фиксируемые или неявные транзакции
Завершение транзакций:
Транзакции можно завершить инструкцией COMMIT или
ROLLBACK
Указание границ транзакции:
Можно идентифицировать время начала и окончания
транзакций компонента Database Engine с помощью
инструкций языка Transact-SQL
25. Границы транзакции
Для определения момента начала и окончаниятранзакции используются
Операторы Transact-SQL:
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
COMMIT WORK
ROLLBACK WORK
SET IMPLICIT_TRANSACTIONS
Функции и методы API (используются для
управления транзакциями в приложениях SQL
Server)
26. Типы транзакций
Явные – транзакция, начало и конецкоторой определены явно
С автоматической фиксацией – режим
по умолчанию
Неявные
27. Явные транзакции
BEGIN TRANSACTION –задает начальную точку явной транзакции для
соединения
COMMIT TRANSACTION или COMMIT WORK –
используется для успешного завершения транзакции,
если не возникла ошибка. Все выполненные
транзакцией модификации данных сохраняются в БД.
Задействованные ресурсы освобождаются
ROLLBACK TRANSACTION или ROLLBACK WORK используется для отмены транзакции, во время
которой возникла ошибка. Все данные,
модифицированные во время транзакции,
возвращаются в исходное состояние.
Задействованные ресурсы освобождаются
28. Транзакции с автоматической фиксацией
Режим с автоматической фиксациейявляется режимом управления
транзакциями SQL Server по
умолчанию
В этом режиме каждый завершенный
оператор T-SQL либо фиксируется
либо откатывается
Ошибки компиляции и периода
выполнения
29. Неявные транзакции
После фиксации или отката текущейтранзакции SQL Server автоматически
начинает новую транзакцию –
транзакции генерируются непрерывно друг
за другом, образуя цепочку транзакций
ALTER TABLE
CREATE
DELETE
DROP
FETCH
GRANT
INSERT
OPEN
REVOKE
SELECT
TRUNCATE TABLE
UPDATE
SET IMPLICIT_TRANSACTIONS ON
30. Вложенные транзакции
Транзакции могут быть вложенными,и если откатывается вложенная
транзакция, то все ожидающие ее
завершения (т.е. внешние) также
откатываются
31. Управление блокировками
Блокировка – это объект, с помощьюкоторого программы показывают
зависимость пользователя от ресурса
32. Блокировки
С помощью блокировок SQL Serverобеспечивает целостность и
согласованность БД
Блокировки запрещают
пользователям читать данные,
изменяемые другими
пользователями, а также не дают
изменять одни и те же данные
нескольким пользователям
одновременно
33. Основные типы блокировок
Блокировки чтения — позволяютдругим читать, но не записывать
Блокировки записи — запрещают
другим и читать, и записывать
SQL Server управляет блокировками
автоматически
Блокировки разрешают параллельное
использование данных
34. Архитектура транзакций и блокировок
С помощью транзакций и блокировокSQL Server обеспечивает
согласованность и целостность всех
БД, несмотря на возникающие в
системе ошибки