Скляр А.Я. Введение в InterBase
.pdf266 |
Глава 9 |
|
|
активная |
Старейшая |
|
Событие |
заинтересованная |
актуальная |
||
|
|
|
||
Транзакция |
N+1 |
N+1 |
N |
|
N+1 |
читает |
|
|
|
таблицу |
|
|
|
|
Транзакция |
N+1 |
N+1 |
N |
|
N+4 |
читает |
|
|
|
таблицу |
|
|
|
|
Транзакция |
N+1 |
N+1 |
N |
|
N+6 |
читает |
|
|
|
таблицу |
|
|
|
|
Транзакция |
N+1 |
N+1 |
N |
|
N+7 |
читает |
|
|
|
таблицу |
|
|
|
|
Комментарий
Каждая транзакция видит обратные
версии записей транзакций N+3 и N (за исключением транзакции N+1, которая так до сих пор и не может видеть ни одной версии). Каждая транзакция читает только версию, сохраненную на момент ее старта. Все транзакции получают воспроизводимое чтение (repeatable read).
Транзакция N+1 не видит ни одной из версий.
Транзакция N+4 видит версию транзакции N
Транзакция N+6 видит версию транзакции N+3
Транзакция N+7 видит свою собственную версию (не сохраненную по commit).
В это время транзакции N+6 и N+7 видят, что читаемая ими запись имеет указатель на обратную версию, и пытаются определить, не является ли эта обратная версия ненужной. Обе транзакции обнаруживают, что старейшей активной является транзакция N+1, которая не может видеть изменений, произведенных транзакцией N+3. Поэтому никакие обратные версии не являются устаревшими и сборка мусора не производится
Транзакции. Механизм транзакций в InterBase |
267 |
Событие
Транзакция N+1 завершается commit
Транзакция N+4 завершается commit
Транзакция N+7 завершается commit
Транзакция N+8стартует
Транзакция N+8 читает таблицу
активная |
Старейшая |
|
|
|
|
заинтересованная |
актуальная |
|
Комментарий |
||
|
|
|
|
||
N+4 |
N+2 |
n=f(N+4)= Теперь |
старейшей |
заинтересованной |
|
|
|
N+1 |
становится отмененная транзакция N+2 |
||
N+5 |
N+2 |
n=f(N+5)= |
|
|
|
|
|
N+1 |
|
|
|
N+5 |
N+2 |
N+1 |
|
|
|
N+5 |
N+2 |
N+1 |
f(N+8)=N+5 |
|
|
N+5 |
N+2 |
N+1 |
Когда транзакция N+8 (сервер) читает |
||
|
|
|
запись, о которой мы говорим уже |
||
|
|
|
полчаса, она читает версию, созданную |
||
|
|
|
транзакцией N+7. Поскольку у этой |
||
|
|
|
версии есть указатель на обратную |
||
|
|
|
версию, то транзакция N+8 предпола- |
||
|
|
|
гает |
выполнение |
сборки мусора. |
В соответствии с локальным TIP транзакции N+8 старейшей активной является транзакция N+6. Она может видеть изменения, сделанные транзакцией N+3. Таким образом, версия транзакции N становится никому не нужной и убирается как мусор
Транзакция |
N+5 |
N+2 |
N+1 |
f(N+9)=N+5 |
N+9стартует |
|
|
|
|
Транзакция |
N+5 |
N+2 |
N+1 |
Все то же самое. Окончательно мы |
N+9модифи- |
|
|
|
имеем главную версию записи с иден- |
цирует запись |
|
|
|
тификатором транзакции N+9, первую |
|
|
|
|
обратную версию с идентификатором |
|
|
|
|
транзакции N+7 и вторую обратную |
|
|
|
|
версию с идентификатором транзакции |
|
|
|
|
N+3 |