"Мадорский Г.В." ...
>
>
> >    Ну вот, смотри сам :
> >
> > Тр-ция 1 вставляет ключ 'AAA', запись 1
> > Тр-ция 1 коммит
> >
> > Тр-ция 2 апдейтит запись 1 и меняет ключ на 'BBB'.
> > Тр-ция 2 коммит
> >
> > Тр-ция 3 ищет ключ 'AAA'.
> >    Там есть {запись 1, тр-ция 1}
> >
> > Если тр-ция 3 не прочитает запись 1, которая уже имеет ключ 'BBB',
> > то она выдаст неверный результат.
> >
> >    Значение {ключ 'AAA', запись 1, тр-ция 1} будет удалено
> > из индекса только в результате сборки мусора.
>
> Спасибо за разяснения. Въехал вроде.
>
> А вот где-то внутрях сервера есть список активных транзакций? Если его
> задействовать при поиске тоже видимо не получится?

    Вот не въехал ты всё-таки :( Как активность тр-ции позволит узнать,
что ключ, лежащий в индексе, уже есть мусор и в актуальной версии записи
давно другое значение ключа ? Активность тр-ции позволит узнать - можно
ли эту версию читать в принципе, т.е. если бы тр-ция 3 стартовала _до_
тр_ции 2, то это имело бы значение. Но я специально придумал такой простой
пример, где проблему сразу хорошо видно... похоже не совсем простой... ;)

> Ты простейшую ситуацию обрисовал, а вариаций на тему с учетом уровня
> изолированности много придумать можно. Мне чего-то все не просчитать :).

    Там на самом деле всё достаточно просто :) И вариаций не так уж и
много - пальцев одной руки хватает, как правило (мутанты молчат :)

-- 
Хорсун Влад


Ответить