17.6.6 Журналы отмены
Журнал отмены — это набор записей журнала отмены, связанных с одной транзакцией чтения-записи. Запись журнала отмены содержит информацию о том, как отменить последнее изменение транзакцией в записи. Если другой транзакции необходимо увидеть исходные данные в рамках операции согласованного чтения, немодифицированные данные извлекаются из записей журнала отмены. Журналы отмены существуют внутри , которые содержатся в . Сегменты отката находятся в и в .
Журналы отмены, которые находятся в глобальном временном пространстве таблиц, используются для транзакций, которые изменяют данные в пользовательских временных таблицах. Эти журналы отмены не регистрируются в журнале повторного применения, так как они не требуются для восстановления после сбоя. Они используются только для отката во время работы сервера. Этот тип журнала отмены повышает производительность, избегая ввода-вывода журнала повторного применения.
Дополнительную информацию об шифровании данных в состоянии покоя для журналов отмены см. в разделе Шифрование журнала отмены.
Каждое пространство таблиц отмены и глобальное временное пространство таблиц поддерживают максимальное количество 128 сегментов отката. Переменная innodb_rollback_segments определяет количество сегментов отката.
Количество транзакций, которые поддерживает сегмент отката, зависит от количества слотов отмены в сегменте отката и количества журналов отмены, необходимых каждой транзакции. Количество слотов отмены в сегменте отката отличается в зависимости от InnoDB размера страницы.
| Размер страницы InnoDB | Количество слотов отмены в сегменте отката (Размер страницы InnoDB / 16) |
|---|---|
4096 (4KB) | 256 |
8192 (8KB) | 512 |
16384 (16KB) | 1024 |
32768 (32KB) | 2048 |
65536 (64KB) | 4096 |
Транзакции присваиваются до четырёх журналов отмены, по одному для каждого из следующих типов операций:
Журналы отмены присваиваются по мере необходимости. Например, транзакция, выполняющая INSERT, UPDATE и DELETE операции над обычными и временными таблицами, требует полного назначения четырёх журналов отмены. Транзакция, выполняющая только INSERT операции над обычными таблицами, требует одного журнала отмены.
Транзакции, выполняющие операции над обычными таблицами, получают журналы отмены из сегмента отката выделенного пространства таблиц отмены. Транзакции, выполняющие операции над временными таблицами, получают журналы отмены из выделенного сегмента отката глобального временного пространства таблиц.
Журнал отмены, назначенный транзакции, остается прикрепленным к транзакции на всё время её существования. Например, журнал отмены, назначенный транзакции для операции INSERT над обычной таблицей, используется для всех операций INSERT над обычными таблицами, выполняемых этой транзакцией.
Учитывая описанные выше факторы, можно использовать следующие формулы для оценки количества одновременных транзакций чтения-записи, которые InnoDB может поддерживать.
Возможно столкнуться с ошибкой ограничения одновременных транзакций, прежде чем достичь количества одновременных транзакций чтения-записи, которые InnoDB может поддерживать. Это происходит, когда сегмент отката, назначенный транзакции, исчерпывает слоты отмены. В таких случаях попробуйте повторно выполнить транзакцию.
Когда транзакции выполняют операции над временными таблицами, количество одновременных транзакций чтения-записи, которые InnoDB может поддерживать, ограничено количеством сегментов отката, выделенных для глобального временного пространства таблиц, которое по умолчанию равно 128.
-
Если каждая транзакция выполняет либо операцию
INSERTили операциюUPDATEилиDELETE, количество одновременных транзакций чтения-записи, которыеInnoDBможет поддерживать, равно:(innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces
-
Если каждая транзакция выполняет операцию
INSERTи операциюUPDATEилиDELETE, количество одновременных транзакций чтения-записи, которыеInnoDBможет поддерживать, равно:(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces
-
Если каждая транзакция выполняет операцию
INSERTнад временной таблицей, количество одновременных транзакций чтения-записи, которыеInnoDBможет поддерживать, равно:(innodb_page_size / 16) * innodb_rollback_segments
-
Если каждая транзакция выполняет операцию
INSERTи операциюUPDATEилиDELETEнад временной таблицей, количество одновременных транзакций чтения-записи, которыеInnoDBможет поддерживать, равно:(innodb_page_size / 16 / 2) * innodb_rollback_segments
© 2025 Oracle
Licensed under the GPLv2 License.