Коммит против быстрой фиксации против фиксации очистки в базе данных Oracle

12

Мне было интересно, может ли кто-нибудь проверить мое понимание различий между этими тремя терминами в отношении баз данных Oracle.

Многие источники путают эти термины и не объясняют их в деталях, поэтому было сложно найти информацию.

Из того, что я собираю:

  1. Коммит и быстрый коммит - это одно и то же, все коммиты - это быстрые коммиты.
  2. Быстрое принятие, по существу, только обновляет флаг в таблице транзакций заголовка сегмента отмены / отката, чтобы указать, что транзакция зафиксирована. Однако фактический блок не пересматривается, что означает, что байтовый адрес отмены (UBA) в списке заинтересованных транзакций (ITL), который находится в заголовке блока данных, все еще указывает на таблицу транзакций соответствующего сегмента отмены. Кроме того, байты блокировки соответствующих строк не освобождаются, и количество блокировок в ITL не изменяется (строки все еще заблокированы).
  3. В коммите СКА, блок будет вновь и ITL обновляются с фиксацией SCN. Однако счетчик блокировок в ITL и байт блокировки, сохраняемый с каждой строкой, все еще не обновляются (строка по-прежнему блокируется, как при быстрой фиксации), это не приводит к повторному выполнению, даже если блок изменяется.
  4. Блоки, которые были зафиксированы нормально (== быстрое принятие), будут подвергаться отложенной очистке блока при следующем касании (и генерировать повтор).
  5. Блоки, прошедшие очистку при фиксации, будут подвергаться отложенной очистке блока регистрации при следующем касании (и генерировать повтор).

Надеюсь, кто-то может проверить эти пункты! Благодарность!

BYS2
источник

Ответы:

6

Вы правильно поняли основы. Существует только один тип коммита (без нормального , быстрого ...).

из концепта док :

Когда транзакция фиксируется, выполняются следующие действия:

  • Системный номер изменения (SCN) генерируется для COMMIT.

    Внутренняя таблица транзакций для связанных записей отмены табличного пространства, которые транзакция зафиксировала. Соответствующий уникальный SCN транзакции назначается и записывается в таблицу транзакций. Смотрите «Сериализуемый уровень изоляции».

  • Процесс записи журнала (LGWR) записывает оставшиеся записи журнала повторов в буферах журналов повторов в оперативный журнал повторов и записывает SCN транзакции в оперативный журнал повторов. Это атомарное событие составляет фиксацию транзакции.

  • Oracle Database освобождает блокировки для строк и таблиц.

    Пользователи, которые были поставлены в очередь в ожидании блокировок, удерживаемых незафиксированной транзакцией, могут продолжить свою работу.

  • База данных Oracle удаляет точки сохранения.

  • Oracle Database выполняет очистку фиксации.

    Если измененные блоки, содержащие данные из зафиксированной транзакции, все еще находятся в SGA, и если никакой другой сеанс не изменяет их, то база данных удаляет информацию транзакции, связанную с блокировкой, из блоков. В идеале, COMMIT очищает блоки, так что последующий SELECT не должен выполнять эту задачу.

Таким образом, очистка (полная с повтором) будет выполняться во время фиксации, если блоки все еще находятся в SGA.

В активных системах блоки с незафиксированными транзакциями обычно записываются на диск и сбрасываются из SGA. В этом случае блок остается без изменений, и следующий запрос, касающийся блока, будет выполнять отсроченную очистку блока (ваша точка 5 встречается не во всех случаях).

Винсент Малграт
источник