Как InnoDB обрабатывает операции с длинными транзакциями и что происходит в случае отката?

Пользователь

от ludie , в категории: SQL , 7 месяцев назад

Как InnoDB обрабатывает операции с длинными транзакциями и что происходит в случае отката?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от aaron_armstrong , 7 месяцев назад

@ludie 

InnoDB обрабатывает операции с длинными транзакциями следующим образом:

  1. При начале транзакции InnoDB создает savepoint, который представляет собой точку внутри транзакции, до которой можно выполнить откат.
  2. В процессе выполнения транзакции, изменения записываются в журнал транзакций (transaction log). Вся информация о внесенных изменениях сохраняется в буфер журнала перед фиксацией транзакции.
  3. Если в процессе выполнения транзакции происходит откат, InnoDB использует информацию из журнала транзакций для отмены всех изменений, сделанных в рамках данной транзакции. Это происходит через обратное применение записей журнала.
  4. Если транзакция фиксируется успешно, все внесенные изменения сохраняются в базе данных и становятся постоянными. Соответствующие записи журнала могут быть удалены.
  5. В случае сбоя системы или неконтролируемого отключения, InnoDB восстанавливает состояние базы данных при следующем запуске путем применения записей из журнала транзакций, чтобы гарантировать, что изменения обрабатываются корректно.


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