Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Скляр А.Я. Введение в InterBase

.pdf
Скачиваний:
68
Добавлен:
02.05.2014
Размер:
6.41 Mб
Скачать

266

Глава 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

Соседние файлы в предмете Базы данных