Spec-Zone.ru › MySQL 8.4

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

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

Хотя данные записываются дважды, буфер двойной записи не требует удвоенной нагрузки на ввод/вывод или удвоенного числа операций ввода/вывода. Данные записываются в буфер двойной записи в большом последовательном блоке с помощью одной операции ввода/вывода операционной системы (за исключением случаев, когда 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-8.4-en/innodb-doublewrite-buffer.html

Spec-Zone.ru

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