Re[7]: Версионность в Yukon
От: Merle Австрия http://rsdn.ru
Дата: 15.11.04 11:27
Оценка:
Здравствуйте, PCherkasova, Вы писали:

PC>Я была неправа. На самом деле, для уровня snapshot все плохо. Потому что сериализуемость также нарушается, если обращаться к записи по индексированному уникальному ключу, а проверять и обновлять неиндексированное значение:

Совершенно верно. Пример-то конечно надуманный, но общий смысл отражает. Аномалия вылезает в том случае, если существует ограничение зависящие от нескольких переменных и разные транзакции пишут в разные переменные. В данном случае записи по которым считается сумма могли вообще находиться в разных таблицах и тогда никакое бы отсутствие индекса не спасло.
Другое дело, что для snapshot'а такое поведение совершенно нормально это просто особенность данного уровня изоляции, остальные IL допускают еще более любопытные эффекты.
С теориетической точки зрения гарантированную защиту от всех аномалий дает только Serializable уровень изоляции, но обычно это слишком дорогое удовольствие.

Что же касается наличия/отсутствия индекса, то это отдельная история. В данном случае Юконовский snapshot оказался даже строже чем "классический", который пропустил бы эту аномалию в любом случае, ни каким образом не оглядываясь на индексы.
И из-за этого мне вообще довольно смутно видится перспектива использования Юконовского snapshot'а для пишущих транзакций, так как оптимизатор может выбрать table scan даже при наличии индекса, а это автоматически приведет к конфликту и, как следствие, откату, в случае обновления любой записи в таблице во время работы транзакции, даже если обновленная запись никакого отношения к работе нашей snapshot транзакции не имеет.
Проблема в том, что при snapshot'е, в отсутствии индекса, сиквел видит конфликт версий там, где его на самом деле нет.
... [ RSDN@Home 1.1.4 revision 0 ]
Мы уже победили, просто это еще не так заметно...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.