Spec-Zone.ru › MySQL 8.4

A.16 MySQL 8.4 FAQ: InnoDB Буфер Изменений

A.16.1. Какие типы операций изменяют вторичные индексы и приводят к буферизации изменений?
A.16.2. В чем заключается преимущество буфера изменений InnoDB?
A.16.3. Поддерживает ли буфер изменений другие типы индексов?
A.16.4. Сколько места использует InnoDB для буфера изменений?
A.16.5. Как определить текущий размер буфера изменений?
A.16.6. Когда происходит слияние буфера изменений?
A.16.7. Когда происходит сброс буфера изменений?
A.16.8. Когда следует использовать буфер изменений?
A.16.9. Когда не следует использовать буфер изменений?
A.16.10. Где можно найти дополнительную информацию о буфере изменений?

A.16.1.

Какие типы операций изменяют вторичные индексы и приводят к буферизации изменений?

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

A.16.2.

В чем заключается преимущество буфера изменений?

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

A.16.3.

Поддерживает ли буфер изменений другие типы индексов?

Нет. Буфер изменений поддерживает только вторичные индексы. Кластеризованные индексы, полнотекстовые индексы и пространственные индексы не поддерживаются. Для полнотекстовых индексов используется собственный механизм кэширования.

A.16.4.

Сколько места использует буфер изменений?

До внедрения опции конфигурации innodb_change_buffer_max_size в MySQL 5.6 максимальный размер буфера изменений на диске в системном табличном пространстве составлял 1/3 размера буфера страниц InnoDB.

В MySQL 5.6 и более поздних версиях опция конфигурации innodb_change_buffer_max_size определяет максимальный размер буфера изменений как процент от общего размера буфера страниц. По умолчанию innodb_change_buffer_max_size установлен на 25. Максимальное значение составляет 50.

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

Страницы буфера изменений не обязаны храниться в буфере страниц и могут быть удалены операциями LRU.

A.16.5.

Как определить текущий размер буфера изменений?

Текущий размер буфера изменений отображается SHOW ENGINE INNODB STATUS \G в разделе INSERT BUFFER AND ADAPTIVE HASH INDEX. Например:

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges

Ключевые показатели включают:

  • size: Количество страниц, используемых в буфере изменений. Размер буфера изменений равен seg size - (1 + free list len). Значение 1 + представляет страницу заголовка буфера изменений.

  • seg size: Размер буфера изменений в страницах.

Дополнительную информацию о мониторинге состояния буфера изменений см. в Разделе 17.5.2, «Буфер изменений».

A.16.6.

Когда происходит слияние буфера изменений?

  • Когда страница читается в буфер страниц, буферизованные изменения объединяются по завершении чтения, перед тем как страница станет доступной.

  • Слияние буфера изменений выполняется как фоновая задача. Параметр innodb_io_capacity устанавливает верхний предел активности ввода-вывода, выполняемой InnoDB фоновыми задачами, такими как слияние данных из буфера изменений.

  • Слияние буфера изменений выполняется во время восстановления после сбоя. Изменения применяются из буфера изменений (в системном табличном пространстве) к листовым страницам вторичных индексов по мере чтения страниц индексов в буфер страниц.

  • Буфер изменений полностью сохраняется и может пережить сбой системы. После перезапуска операции слияния буфера изменений возобновляются в рамках обычных операций.

  • Полное слияние буфера изменений можно принудительно выполнить во время медленного завершения сервера с помощью --innodb-fast-shutdown=0.

A.16.7.

Когда буфер изменений сбрасывается?

Обновленные страницы сбрасываются тем же механизмом сброса, что и другие страницы, занимающие пул буферов.

A.16.8.

Когда следует использовать буфер изменений?

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

A.16.9.

Когда буфер изменений не следует использовать?

Возможно, следует отключить буфер изменений, если весь набор данных помещается в пул буферов InnoDB, если у вас относительно мало вторичных индексов или если вы используете твердотельные накопители, где случайные чтения примерно так же быстры, как последовательные. Перед внесением изменений в конфигурацию рекомендуется выполнить тесты с представительной нагрузкой, чтобы определить, приносит ли отключение буфера изменений какую-либо пользу.

A.16.10.

Где можно найти дополнительную информацию о буфере изменений?

См. раздел 17.5.2, «Буфер изменений».

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

Spec-Zone.ru

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