Spec-Zone.ru › MySQL 5.7

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

Транзакции могут быть назначены до четырёх журналов отката, по одному для каждого типа операции:

  1. INSERT операции над пользовательскими таблицами

  2. UPDATE и DELETE операции над пользовательскими таблицами

  3. INSERT операции над пользовательскими временными таблицами

  4. UPDATE и DELETE операции над пользовательскими временными таблицами

Журналы отката назначаются по мере необходимости. Например, транзакция, выполняющая 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-undo-logs.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API