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