SQL - статьи

       

Резюме и Выводы


Подводя итоги, можно сказать, что оригинальные определения уровней изолированности в ANSI SQL имеют серьезные недостатки (как пояснялось в разд. 3). Словесные определения противоречивы и неполны. Не исключается феномен грязной записи (P0). В Замечании 5 мы даем рекомендации по тому, как модифицировать определения уровней изолированности ANSI SQL, чтобы сделать их эквивалентными блокировочным уровням изолированности в [GLPT].

В ANSI SQL уровень изолированности REPEATABLE READ мыслился как уровень, на котором исключаются все аномалии, кроме фантомов. Определение, данное в терминах аномалий в , не достигает этой цели, в отличие от блокировочного определения из . Выбор ANSI-термина REPEATABLE READ является вдвойне неудачным: (1) повторяемые чтения не дают повторяемых результатов; (2) в индустрии этот термин уже занят, и в некоторых продуктах повторимое чтение означает сериализуемость. Мы рекомендуем найти для этого уровня новое название.

Некоторые коммерчески популярные уровни изолированности, по степени изолированности попадающие в интервал между уровнями REPEATABLE READ и SERIALIZABLE из , в разд. 4 охарактеризованы новыми феноменами и аномалиями. Все уровни изолированности, о которых упоминается в этой статье, можно классифицировать, как показано на рис. 1 и в . Чем выше на рисунке расположен уровень, тем он сильнее (см. определение в начале подраздела 4.1). Уровни соединены линиями, помеченными феноменами или аномалиями, которые отличают один уровень от другого.

Рисунок 1. Диаграмма уровней изолированности и их взаимосвязей. Предполагается, что уровни изолированности ANSI SQL усилены в соответствии с замечанием 5 и таблицей 3. Дуги аннотированы названиями феноменов, отличающих уровни изолированности. Не показана потенциальная многоверсионная иерархия, расширяющая Snapshot Isolation на более слабые степени изолированности путем установки временных меток на пооператорной основе. Также не показаны исходные уровни изолированности ANSI SQL, основанные на строгой интерпретации феноменов P1, P2 и P3.


Таблица 4. Типы изолированности, характеризуемые возможными допустимыми аномалиями



Уровень

изолированности
Р0

Dirty
Write
Р1

Dirty
Read
Р4С

Cursor
Lost
Update
P4

Lost
Update
Р2

Fuzzy
Read
Р3

Phantom
A5A

Read
Skew
A5B

Write

Skew
READ

UNCOMMITTED

== Степень 1
невозможен
возможен
возможен
возможен
возможен
возможен
возможен
возможен
READ COMMITTED

== Степень 2
невозможен
невозможен
возможен
возможен
возможен
возможен
возможен
возможен
CURSOR STABILITY
невозможен
невозможен
невозможен
иногда
возможен
иногда
возможен
возможен
возможен
иногда
возможен
REPEATABLE READ
невозможен
невозможен
невозможен
невозможен
невозможен
возможен
невозможен
невозможен
SNAPSHOT ISOLATION
невозможен
невозможен
невозможен
невозможен
невозможен
иногда
возможен
невозможен
возможен
ANSI SQL

SERIALIZABLE

== Степень 3

== Repeatable Read

Дейт, IBM,

Tandem,...
невозможен
невозможен
невозможен
невозможен
невозможен
невозможен
невозможен
невозможен

Заметим, что уровни ограниченной изолированности для многоверсионных систем никогда раньше не классифицировались, хотя реализованы в нескольких продуктах. Во многих приложениях состязания за блокировки избегаются путем использования уровней изолированности типа Cursor Stability или Read Consistency в Oracle. Snapshot Isolation имеет лучшие характеристики, чем любой из таких уровней: исключаются аномалия потерянных изменений, некоторые фантомные аномалии (например описанная в ANSI SQL), никогда не блокируются только читающие транзакции, и они не блокируют изменяющие транзакции.

Содержание раздела