Феномен фантомов

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

 

 
 

 

 


Рис. 18.6. Феномен фантомов

 

На этом рисунке показано, что в момент времени t0 были образованы две транзакции T1 и T2. В момент времени t1 транзакция T2 выполняет операцию выборки строк из таблицы R по условию c. В момент времени t2 (t2 > t1) транзакция T1 выполняет над таблицей R операцию обновления (вставки или модификации строк), в результате которой в таблице R появляются дополнительные строки, удовлетворяющие условию c. В момент времени t3 (t3 > t2) транзакция T2 повторно выполняет операцию выборки строк из таблицы R по условию c и обнаруживает наличие в результате дополнительных фантомных строк.

 

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

 

Наконец, для транзакций, выполняемых на уровне изоляции SERIALIZABLE, невозможно и проявление феномена фантомов. Термин serializable (сериализуемый) используется по той причине, что при работе на данному уровне изоляции суммарный эффект выполнения набора транзакций {T1, T2, …, Tn} идентичен эффекту некоторого последовательного выполнения этих транзакций. Это означает предельную изолированность транзакций. Общая картина взаимосвязи уровней изоляции и феноменов транзакций показана на таб. 18.1.

 

Уровень Грязное чтение Неповторяющееся чтение Фантомы
READ UNCOMMITTED Возможно Возможно Возможны
READ COMMITTED Невозможно Возможно Возможны
REPEATABLE READ Невозможно Невозможно Возможны
SERIALIZABLE Невозможно Невозможно Невозможны

 

Таб. 18.1. Уровни изоляции и феномены