Spec-Zone.ru › MySQL 5.7

A.16 MySQL 5.7 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.

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

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

A.16.3.

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

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

A.16.4.

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

До введения параметра конфигурации 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: Размер буфера изменений в страницах.

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

A.16.6.

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

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

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

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

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

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

A.16.7.

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

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

A.16.8.

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

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

A.16.9.

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

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

A.16.10.

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

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

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

Spec-Zone.ru

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