Spec-Zone.ru › MySQL 9.2

17.6.4 Буфер двойной записи

Буфер двойной записи — это область хранения, где InnoDB записывает страницы, вытесненные из буфера пула, прежде чем записать их в свои правильные позиции в InnoDB файлах данных. Если в середине записи страницы произойдёт выход из строя операционной системы, подсистемы хранения или неожиданный выход процесса mysqld, InnoDB сможет найти правильную копию страницы в буфере двойной записи во время восстановления после сбоя.

Несмотря на то, что данные записываются дважды, буфер двойной записи не требует двойного увеличения накладных расходов на ввод-вывод или двойного количества операций ввода-вывода. Данные записываются в буфер двойной записи в большом последовательном блоке с помощью одной fsync() вызова операционной системы (за исключением случаев, когда innodb_flush_method установлено в значение O_DIRECT_NO_FSYNC).

Область хранения буфера двойной записи находится в файлах двойной записи.

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

  • innodb_doublewrite

    Переменная innodb_doublewrite управляет включением буфера двойной записи. Он включён по умолчанию в большинстве случаев. Чтобы отключить буфер двойной записи, установите innodb_doublewrite в значение OFF. Рассмотрите возможность отключения буфера двойной записи, если вас больше беспокоит производительность, чем целостность данных, как, например, при проведении бенчмарков.

    innodb_doublewrite поддерживает DETECT_AND_RECOVER и DETECT_ONLY настройки.

    Настройка DETECT_AND_RECOVER идентична настройке ON. С этой настройкой буфер двойной записи полностью включён, и содержимое страниц базы данных записывается в буфер двойной записи, где к нему обращаются при восстановлении для исправления неполных записей страниц.

    С настройкой DETECT_ONLY в буфер двойной записи записывается только метаданные. Содержимое страниц базы данных не записывается в буфер двойной записи, и восстановление не использует буфер двойной записи для исправления неполных записей страниц. Эта облегчённая настройка предназначена только для обнаружения неполных записей страниц.

    MySQL поддерживает динамические изменения настройки innodb_doublewrite, включающей буфер двойной записи, между ON, DETECT_AND_RECOVER и DETECT_ONLY. MySQL не поддерживает динамические изменения между настройкой, включающей буфер двойной записи, и OFF, и наоборот.

    Если буфер двойной записи расположен на устройстве Fusion-io, поддерживающем атомарные записи, буфер двойной записи автоматически отключается, и записи в файлы данных выполняются с помощью атомарных записей Fusion-io вместо этого. Однако имейте в виду, что настройка innodb_doublewrite является глобальной. Когда буфер двойной записи отключён, он отключён для всех файлов данных, включая те, которые не находятся на оборудовании Fusion-io. Эта функция поддерживается только на оборудовании Fusion-io и включена только для Fusion-io NVMFS в Linux. Для максимальной эффективности рекомендуется настройка innodb_flush_method со значением O_DIRECT.

  • innodb_doublewrite_dir

    Переменная innodb_doublewrite_dir определяет каталог, в котором InnoDB создаёт файлы двойной записи. Если каталог не указан, файлы двойной записи создаются в каталоге innodb_data_home_dir, который по умолчанию является каталогом данных, если не указан другой.

    Символ «#» автоматически добавляется в начало указанного имени каталога, чтобы избежать конфликтов с именами схем. Однако, если в имени каталога явно указаны префиксы «.», «#» или «/», символ «#» не добавляется в начало имени каталога.

    В идеале каталог двойной записи должен располагаться на носителе с наибольшей скоростью.

  • innodb_doublewrite_files

    Переменная innodb_doublewrite_files определяет количество файлов двойной записи, по умолчанию равное 2. По умолчанию для каждого экземпляра буфера пула создаются два файла двойной записи: файл двойной записи списка сброса и файл двойной записи списка LRU.

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

    Файл двойной записи списка LRU предназначен для страниц, вытесненных из списка LRU буфера пула. Он также содержит места для отдельных записей страниц. Размер файла двойной записи списка LRU по умолчанию составляет InnoDB размер страницы * (страницы двойной записи + (512 / количество экземпляров буфера пула)), где 512 — это общее количество мест, зарезервированных для отдельных записей страниц.

    Минимальное количество файлов двойной записи равно двум. Максимальное количество файлов двойной записи — это дважды количество экземпляров буфера пула. (Количество экземпляров буфера пула регулируется переменной innodb_buffer_pool_instances.)

    Имена файлов двойной записи имеют следующий формат: #ib_page_size_file_number.dblwr (или .bdblwr с настройкой DETECT_ONLY). Например, для экземпляра MySQL с размером страниц InnoDB 16 КБ и одним буфером пула создаются следующие файлы двойной записи:

    #ib_16384_0.dblwr
    #ib_16384_1.dblwr
    

    Переменная innodb_doublewrite_files предназначена для продвинутой настройки производительности. Значение по умолчанию должно быть подходящим для большинства пользователей.

  • innodb_doublewrite_pages

    Переменная innodb_doublewrite_pages контролирует максимальное количество страниц двойной записи на поток. Эта переменная предназначена для продвинутой настройки производительности. Значение по умолчанию должно быть подходящим для большинства пользователей.

InnoDB автоматически шифрует страницы файлов двойной записи, относящиеся к зашифрованным табличным пространствам (см. Раздел 17.13, «Шифрование InnoDB данных в состоянии покоя»). Аналогично, страницы файлов двойной записи, принадлежащие сжатым по страницам табличным пространствам, сжимаются. В результате файлы двойной записи могут содержать различные типы страниц, включая нешифрованные и несжатые страницы, зашифрованные страницы, сжатые страницы и страницы, которые одновременно зашифрованы и сжаты.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/innodb-doublewrite-buffer.html

Spec-Zone.ru

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