Spec-Zone.ru › MySQL 9.2

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

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

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

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

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

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

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

Spec-Zone.ru

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