Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд 18-21 (или 17-20).doc
Скачиваний:
6
Добавлен:
26.04.2019
Размер:
233.47 Кб
Скачать

Вопрос 20

Типы конфликтов при параллельном выполнении транзакций (4 типа). Уровни изолированности транзакций.

Конфликт транзакций

Анализ проблемы параллелизма показывает, что если не предпринимать специальных мер, то при совместной работе нарушается свойство (И) транзакций - изолированность. Транзакции реально мешают друг другу получать правильные результаты, если они пересекаются и обращаются к одним и тем же данным. В результате конкуренции за данными возникают конфликты доступа к данным. Различают конфликты:

· W-W (Запись-Запись). Первая транзакция изменила объект и не закончилась. Вторая пытается изменить этот объект. Результат – потеря обновления.

· R-W (Чтение-Запись) Первая транзакция прочитала объект и не закончилась. Вторая транзакция пытается изменить этот объект. Результат – несовместный анализ.

· W-R (Запись-Чтение). 1-я транзакция изменила объект и не закончилась. 2-я пытается прочитать этот объект. Результат – чтение двух «грязных» файлов.

Конфликты типа R-R (Чтение-чтение) отсутствуют, т.к. данные при чтении не изменяются

Уровни изолированности

SQL Server поддерживает четыре уровня изолированности. Уровень изолированности – значение, определяющее уровень, при котором в транзакции допускаются несогласованные данные, т.е. степень изолированности одной транзакции от другой. Более высокий уровень изолированности повышает точность данных, но при этом может снижаться количество параллельно выполняемых транзакций. С другой стороны, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных. Указываемый вами уровень изолированности для сеанса SQL Server определяет блокирующее поведение всех операторов SELECT, выполняемых во время этого сеанса (если только вы не задали другой уровень изолированности). Блокирующее поведение описано в разделе "Блокировка транзакций" ниже в этой лекции. Ниже описано четыре уровня изолированности – от низшего до высшего:

Read uncommitted (Чтение незафиксированных данных). Самый низкий уровень изолированности. На этом уровне транзакции изолированы только в такой степени, чтобы нельзя было читать физически поврежденные данные.

Read committed (Чтение фиксированных данных). Принятый по умолчанию уровень для SQL Server. На этом уровне разрешается чтение только фиксированных данных. (Фиксированные данные – это данные, которые стали постоянной частью базы данных.)

Repeatable read (Повторяемость чтения). Уровень, при котором чтение одной и той же строки или строк в транзакции дает одинаковый результат. (Пока транзакция не завершена, никакие другие транзакции не могут модифицировать эти данные.)

Serializable (Упорядочиваемость).Самый высокий уровень изолированности; транзакции полностью изолируются друг от друга. На этом уровне результаты параллельного выполнения транзакций для базы данных совпадают с последовательным выполнением тех же транзакций (по очереди в каком-либо поряд

Вопрос 21

Оптимистическая и пессимистическая стратегии разграничения доступа. Блокировочные и безблокировочные (многоверсионные) архитектуры СУБД, их сравнительная характеристика (плюсы и минусы). Суть многоверсионной архитектуры.

Итак, пессимистическая блокировка гарантирует отсутствие конфликтов записи, так как если пользователь начал редактировать запись, другие пользователи не могут внести свои изменения. Таким образом, все пользователи всегда работают с самыми последними данными. Однако запись или страница оказывается заблокированной на продолжительное время, и пользователи, которым нужно изменить данные, размещенные на этой странице, вынуждены ждать, пока она не будет разблокирована. Если приложение требует обеспечить блокировку на уровне записей, лучше использовать пессимистическую блокировку.

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

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

Современные СУБД строятся по одной из архитектур

  1. Основанная на блокировках (MySQL , MS SQL Server)

  2. Многоверсионные (Orakle, FireBerd)

Обьектом блокировки может быть

  1. Строка

  2. Группы строк

  3. Таблица

  4. БД целиком

Многоверсионная архитектура

Важно знать, что сервер InterBase/FireBird всегда создает множество копий записи, когда она со временем изменяется. В этом плане СУБД работает как Система Контроля Версий CVS (Concurrent Versioning System), создавая новую копию записи каждый раз, когда различные транзакции ее (запись) изменяют. Данный механизм необходим серверу для того, чтобы транзакции могли определять, какую версию записи им необходимо видеть.

Работает этот механизм следующим образом. Когда стартует каждая из транзакций, они по порядку получают свой внутренний уникальный номер TRANSACTION_ID. Также транзакция обладает копией внутренней структуры, называемой Transaction Inventory Page (TIP), по которой она получает информацию о состоянии других транзакций (committed, rolled back и т.д.) на момент ее старта. Когда транзакция воздействует на строку в таблице (изменяя, добавляя или удаляя и т.д.), создается новая версия строки и помечается уникальным номером породившей ее транзакции. Теперь, когда другая транзакция выполняет запрос на выборку (SELECT), который возвращает эту строку данных, сервер сравнит режим изоляции транзакции — исполнителя запроса с состоянием транзакций, затронувших каждую версию строки, захватит и выдаст наиболее новую версию строки из всех видимых версий для транзакции — исполнителя запроса на выборку (если таковые имеются).