Транзакция (информатика): различия между версиями

→‎Уровни изоляции транзакций: Какое ещё "упорядоченный"? Кто это написал, совершенно не понимает смысл термина Serializable. Причесал.
(→‎Уровни изоляции транзакций: Какое ещё "упорядоченный"? Кто это написал, совершенно не понимает смысл термина Serializable. Причесал.)
{{addon|Уровни изолированности транзакций}}
В идеале транзакции разных пользователей должны выполняться так, чтобы создавалась иллюзия, что пользователь текущей транзакции — единственный. Однако в реальности, по соображениям производительности и для выполнения некоторых специальных задач, СУБД предоставляют различные уровни изоляции транзакций.
 
Уровни описаны в порядке увеличения изоляцииизолированности транзакций и, соответственно, надёжности работы с данными.
* '''0 — Неподтверждённое чтение''' (Read Uncommitted, Dirty Read, грязное чтение) — чтение незафиксированных изменений своей транзакции и параллельных транзакций, возможны нечистые, неповторяемые чтения и фантомы
* '''10 — ПодтверждённоеЧтение неподтверждённых данных (грязное чтение)''' (Read CommittedUncommitted, Dirty Read) — чтение всехнезафиксированных изменений как своей транзакции, итак зафиксированных измененийи параллельных транзакций. Нет гарантии, что данные, нечистыеизменённые чтениядругими невозможнытранзакциями, не будут в любой момент изменены в результате их отката, поэтому такое чтение является потенциальным источником ошибок. Невозможны потерянные изменения (lost changes), возможны неповторяемыенеповторяемое чтениячтение и фантомы;.
* '''21 — ПовторяемоеЧтение чтениеподтверждённых данных''' (Repeatable Read, SnapshotCommitted) — чтение всех изменений своей транзакции, любыеи изменения,зафиксированных внесённыеизменений параллельнымипараллельных транзакциямитранзакций. послеПотерянные началаизменения своей,и недоступны,грязное нечистыечтение и неповторяемыене чтения невозможныдопускается, возможны неповторяемое чтение и фантомы;.
* '''2 — Повторяемое чтение''' (Repeatable Read, Snapshot) — чтение всех изменений своей транзакции, любые изменения, внесённые параллельными транзакциями после начала своей, недоступны. Потерянные изменения, грязное и неповторяемое чтение невозможны, возможны фантомы.
* '''3 — Упорядоченный''' — (Serializable, сериализуемый) — [[Сериализуемость|упорядоченные (сериализуемые)]] транзакции. Идентичен ситуации, при которой транзакции выполняются строго последовательно, одна после другой, то есть результат действия которых не зависит от порядка выполнения шагов транзакции (запрещено чтение всех данных, изменённых с начала транзакции, в том числе и своей транзакцией). Фантомы невозможны.
* '''3 — Сериализуемый''' — (Serializable) — [[Сериализуемость|сериализуемые]] транзакции. Результат параллельного выполнения сериализуемой транзакции с другими транзакциями должен быть логически эквивалентен результату их какого-либо последовательного выполнения. Проблемы синхронизации не возникают.
Чем выше уровень изоляции, тем больше требуется ресурсов, чтобы их поддерживать.
 
Чем выше уровень изоляции, тем больше требуется ресурсов, чтобы его обеспечить. Соответственно, повышение изолированности может приводить к снижению скорости выполнения параллельных транзакций, что является «платой» за повышение надёжности.
 
В СУБД уровень изоляции транзакций можно выбрать как для всех транзакций сразу, так и для одной конкретной транзакции.