Spec-Zone.ru › MariaDB

Буферизация изменений InnoDB

Буферизация изменений отключена по умолчанию начиная с MariaDB 10.5.15, MariaDB 10.6.7, MariaDB 10.7.3 и MariaDB 10.8.2 (MDEV-27734), устарела и игнорируется начиная с MariaDB 10.9.0 (MDEV-27735), и была удалена в MariaDB 11.0.0 (MDEV-29694).

Тесты производительности, связанные с MDEV-19514, показывают, что буферизация изменений иногда снижает производительность, и в лучшем случае кажется, что она обеспечивает улучшение пропускной способности на несколько процентов. Однако такое улучшение может иметь свою цену: Если буферизованные изменения никогда не объединяются (MDEV-19514, что мотивировано снижением случайных сбоев и удалением опции innodb_force_recovery, которая может привести к дальнейшему повреждению), то системное пространство InnoDB может стать неконтролируемо большим (MDEV-21952).

Операции INSERT, UPDATE и DELETE могут быть особенно ресурсоёмкими, так как после каждого изменения необходимо обновить все индексы. По этой причине эти изменения часто буферизуются.

Страницы изменяются в кэше страниц, а не сразу на диске. При удалении строк устанавливается флаг, поэтому строки не удаляются сразу на диске. Позже изменения запишутся на диск («будут сброшены») фоновыми потоками InnoDB. Страницы, которые были изменены в памяти и ещё не были сброшены, называются грязными страницами. Буферизация изменений данных называется Буферизация изменений.

До MariaDB 5.5 буферизовались только вставленные строки, поэтому этот буфер назывался буфером вставки. Старое название всё ещё встречается в нескольких местах, например, в выводе SHOW ENGINE INNODB STATUS.

Буфер изменений содержит только изменения в индексах. Вставки в уникальные вторичные индексы не могут быть буферизованы, если не используется unique_checks=0. Разрешено буферизация отметок удаления и очистки уникальных вторичных индексов.

Буферизация изменений — это оптимизация, потому что:

  • Одна страница может быть изменена несколько раз в памяти и сброшена на диск только один раз.
  • Грязные страницы сбрасываются вместе, поэтому количество операций ввода-вывода ниже.

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

Основной системной переменной здесь является innodb_change_buffering, которая определяет, какой вид буферизации изменений использовать, если таковой требуется.

Доступны следующие настройки:

  • inserts
    • Буферизовать только операции вставки
  • deletes
    • Буферизовать только операции удаления
  • changes
    • Буферизовать как операции вставки, так и удаления
  • purges
    • Буферизовать фактические физические удаления, которые происходят в фоновом режиме
  • all
    • Буферизовать вставки, удаления и очищения. Значение по умолчанию с MariaDB 5.5 до MariaDB 10.5.14, MariaDB 10.6.6, MariaDB 10.7.2 и MariaDB 10.8.1.
  • none
    • Не буферизовать никакие операции. Значение по умолчанию с MariaDB 10.5.15, MariaDB 10.6.7, MariaDB 10.7.3 и MariaDB 10.8.2.

Изменение значения этой переменной влияет только на буферизацию новых операций. Объединение уже буферизованных изменений не затрагивается.

Системная переменная innodb_change_buffer_max_size определяет максимальный размер буфера изменений, выраженный в процентах от размера кэша страниц.

См. также

  • Кэш страниц InnoDB
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/innodb-change-buffering/

Spec-Zone.ru

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