Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Транзакции.doc
Скачиваний:
1
Добавлен:
09.09.2019
Размер:
202.24 Кб
Скачать

Реализация изолированности транзакций средствами sql Уровни изоляции

Стандарт SQL предусматривает понятие уровней изоляции транзакций. Этот подход обеспечивает необходимые требования к изолированности транзакций, оставляя возможность производителям различных СУБД реализовывать эти требования своими способами (в частности, с использованием блокировок или выделением версий данных).

Стандарт SQL-92 определяет следующие четыре уровня изоляции:

  • SERIALIZABLE - уровень способности к упорядочению.

  • REPEATABLE READ - уровень повторяемого считывания.

  • READ COMMITTED - уровень завершенного считывания.

  • READ UNCOMMITTED - уровень незавершенного считывания.

Serializable (упорядочиваемость)

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

Repeatable read (повторяемость чтения)

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

Read committed (чтение фиксированных данных)

Завершенное чтение, при котором отсутствует черновое, "грязное" чтение.(т.е. чтение одним пользователем данных, которые не были зафиксированны в БД командой COMMIT) Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Это проблема неповторяемого чтения.

Read uncommitted (чтение незафиксированных данных)

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

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

Поведение при различных уровнях изолированности

«+» — эффект присутсвует, «–» — не присутсвует.

Уровень изоляции

Фантомная вставка

Неповторяющееся чтение

«Грязное» чтение

Потерянное обновление

SERIALIZABLE

-

-

-

-

REPEATABLE READ

+

-

-

-

READ COMMITED

+

+

-

-

READ UNCOMMITTED

+

+

+

-(?)

Режимы транзакций сервера ib

IB поддерживает следующие уровни изоляции транзакций:

  • READ COMMITTED RECORD_VERSION

  • READ COMMITTED NO RECORD_VERSION

  • SNAPSHOT

  • SNAPSHOT TABLE STABILITY.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]