Модели транзакций Уровни изолированности пользователей
4 уровня изолированности пользователей. уровень SERIALIZABLE уровень подтвержденного чтения REPEATABLE READ READ COMMITED уровень неподтвержденного, или грязного, чтения - READ UNCOMMITED
уровень SERIALIZABLE Самый высокий уровень изолированности соответствует протоколу сериализации транзакции уровень обеспечивает полную изоляцию транзакций и полную корректную обработку параллельных транзакций.
REPEATABLE READ На этом уровне транзакция не имеет доступа к промежуточным или окончательным результатам других транзакций Однако во время выполнения своей транзакции вы можете увидеть строку, добавленную в БД другой транзакцией. Поэтому один и тотже запрос, выполненный в течение одной транзакции, может дать разные результаты, то есть проблема строк-призраков остается. Однако если такая проблема критична, лучше се разрешать алгоритмически, изменяя алгоритм обработки, исключая повторное выполнение запроса в одной транзакции.
READ COMMITED При этом уровне изолированности транзакция не может обновлять строку, уже обновленную другой транзакцией. При попытке выполнить подобное обновление, транзакция будет отменена автоматически, во избежание возникновения проблемы пропавшего обновления
READ UNCOMMITED При этом уровне изолированности текущая транзакция видит промежуточные и несогласованные данные, и также ей доступны строки- призраки. Однако даже при этом уровне изолированности СУБД предотвращает пропавшие обновления.
оператор задания уровня изолированности выполнения транзакции. SET TRANSACTION IZOLATION LEVEL [{SERIALIZABLE | REPEATABLE READ | READ COMMITED | READ UNCOMHITED}] [{READ WRITE | READ ONLY }]
Уровни изолированности транзакций
Гранулированные синхронизационные захваты При применении этого подхода синхронизационные захваты могут запрашиваться по отношению к объектам разного уровня: файлам, отношениям и кортежам. Требуемый уровень объекта определяется тем, какая операция выполняется(например, для выполнения операции уничтожения отношения объектом синхронизационного захвата должно быть все отношение, а для выполнения операции удаления кортежа этот кортеж). Объект любого уровня может быть захвачен в режиме S (разделяемом) или X (монопольном) Вводится специальный протокол гранулированных захватов и определены новые типы захватов: перед захватом объекта в режиме S или X соответствующий объект более высокого уровня должен быть захвачен в режиме IS. IX или SIX.
Intented for Shared lock IS (Intented for Shared lock, предваряющий разделяемую блокировку) по отношению к некоторому составному объекту 0 означает намерение захватить некоторый входящий в 0 объект в совместном режиме. Например, при намерении читать кортежи из отношения R это отношение должно быть захвачено в режиме IS (а до этого в таком же режиме должен быть захвачен файл).
Intented for exclusive lock IX (Intented for exclusive lock, предваряющий жесткую блокировку) по отношению к некоторому составному объекту 0 означает намерение захватить некоторый входящий в 0 объект в монопольном режиме. Например, при намерении удалять кортежи из отношения R это отношение должно быть захвачено в режиме IX (а до этого в таком же режиме должен быть захвачен файл),
Shared, Intented for exclusive lock SIX (Shared, Intented for exclusive lock, разделяемая блокировка объекта, предваряющая дальнейшие жесткие блокировки его составляющих) по отношениюк некоторому составному объекту О означает совместный захват всего этого объекта с намерением впоследствии захватывать какие-либо входящие в него объекты в монопольном режиме. Например, если выполняется длинная операция просмотра отношения с возможностью удаления некоторых просматриваемых кортежей, то экономичнее всего захватить это отношение в режиме SIX (а доэтого захватить файл в режиме IS)
Матрица совместимости блокировок.
Протокол гранулированных захватов требует соблюдения следующих правил: 1. Прежде чем транзакция установит S- блокировку на данный кортеж, она должна установить блокировку IS или другую, более сильную блокировку на отношение, в котором содержится данный кортеж. 2. Прежде чем транзакция установит Х- блокировку на данный кортеж, она должна установить IX-блокировку или другую более сильную блокировку на отношение, в которое входит кортеж.
Определение Блокировка L1 называется более сильной по отношению к блокировке L2 тогда и только тогда, когда для любой конфликтной ситуации (Нет недопустимо) в столбце блокировки L2 в некоторой строке матрицы совместимости блокировок(см. табл) существует также конфликт в столбце блокировки L1 в той же строке.
Диаграмма приоритетов блокировок
Предикатные синхронизационные захваты Несмотря на привлекательность метода гранулированных синхронизационных захватов, следует отметить, что он не решает проблему фантомов (если, конечно, не ограничиться использованием захватов отношений в режимах S и X). Известно, что проблема фантомов не возникает, если объектом блокировки является целое отношение. Именно это свойство и послужило основой разработки метода предикатных синхронизационных захватов. В -этом случае мы рассматриваем захват отношения простой и частный случай предикатного захвата.
Суть этого метода оценить множество кортежей, которое связано с той или иной транзакций, и если эти два множества, относящиеся к одному отношению, не пересекаются, то две транзакции могут оперировать ими параллельно без взаимной блокировки, а результаты выполнения обеих транзакций будут корректными.
Метод временных меток Альтернативный метод сериализации транзакций, хорошо работающий в условиях редких конфликтов транзакций и не требующий построения графа ожидания транзакций Основная идея метода состоит в следующем: если транзакция Т1 началась раньше транзакции Т2, то система обеспечивает такой режим выполнения, как если бы Т1 была целиком выполнена до начала Т2.
Суть метода Для этого каждой транзакции Т предписывается временная метка t, соответствующая времени начала Т. При выполнении операции над объектом r транзакция Т помечает его своей временной меткой и типом операции (чтение или изменение).
Перед выполнением операции над объектом г транзакция Т1 выполняет следующие действия: Проверяет, не закончилась ли транзакция Т, пометившая этот объект. Если Т закончилась, Т1 помечает объект г и выполняет свою операцию. а Если транзакция Т не завершилась, то Т1 проверяет конфликтность операций. Если операции неконфликтны, при объекте г остается или проставляется временная метка с меньшим значением, и транзакция Т1 выполняет свою операцию. Если операции Т1 и Т конфликтуют, то если t(T) > t(Tl) (то есть транзакция Т является более «молодой», чем Т1), производится откат Т и T1 продолжает работу. Если же t(T) < t(T1) (Т «старше» Т1), то Т1 получает новую временную метку и начинается заново.
Недостатки метода К недостаткам метода временных меток относятся потенциально более частые откаты транзакций, чем в случае использования синхронизационных захватов. Это связано с тем, что конфликтность транзакций определяется более грубо.