14.8.3.6 Сохранение и восстановление состояния буфера пула
Для сокращения периода после перезапуска сервера, InnoDB сохраняет процент наиболее часто используемых страниц для каждого буфера пула при завершении работы сервера и восстанавливает эти страницы при запуске сервера. Процент недавно используемых страниц, который сохраняется, определяется параметром конфигурации innodb_buffer_pool_dump_pct.
После перезапуска загруженного сервера обычно наблюдается период прогрева с плавно увеличивающейся производительностью, поскольку страницы дисков, которые находились в буферном пуле, возвращаются в память (поскольку те же данные запрашиваются, обновляются и т. д.). Возможность восстановления буфера пула при запуске сокращает период прогрева, перезагружая страницы дисков, которые находились в буферном пуле до перезапуска, вместо ожидания выполнения операций DML для доступа к соответствующим строкам. Кроме того, запросы ввода-вывода могут выполняться большими партиями, что делает общую производительность ввода-вывода быстрее. Загрузка страниц происходит в фоновом режиме и не задерживает запуск базы данных.
В дополнение к сохранению состояния буфера пула при завершении работы и его восстановлению при запуске, вы можете сохранять и восстанавливать состояние буфера пула в любое время, пока сервер работает. Например, вы можете сохранить состояние буфера пула после достижения стабильной производительности при устойчивой рабочей нагрузке. Вы также можете восстановить предыдущее состояние буфера пула после выполнения отчетов или задач обслуживания, которые загружают страницы данных в буфер пула, которые необходимы только для этих операций, или после выполнения какой-либо другой нетипичной рабочей нагрузки.
Несмотря на то, что буферный пул может занимать много гигабайт, данные буфера пула, которые InnoDB сохраняет на диске, по сравнению с этим незначительны. На диск сохраняются только идентификаторы табличного пространства и идентификаторы страниц, необходимые для поиска соответствующих страниц. Эта информация получена из таблицы INNODB_BUFFER_PAGE_LRU INFORMATION_SCHEMA. По умолчанию данные об идентификаторе табличного пространства и идентификаторе страницы сохраняются в файле с именем ib_buffer_pool, который сохраняется в каталоге данных InnoDB. Имя файла и расположение можно изменить с помощью параметра конфигурации innodb_buffer_pool_filename.
Поскольку данные кэшируются в буферном пуле и удаляются из него в ходе обычных операций с базой данных, нет проблем, если страницы дисков были недавно обновлены или если операция DML включает данные, которые еще не были загружены. Механизм загрузки пропускает запрашиваемые страницы, которые больше не существуют.
Основной механизм включает фоновый поток, который отправляется для выполнения операций дампинга и загрузки.
Страницы дисков из сжатых таблиц загружаются в буферный пул в сжатом виде. Страницы, как обычно, распаковываются, когда содержимое страниц доступно во время операций DML. Поскольку распаковка страниц является ресурсоемкой операцией для процессора, для одновременного выполнения операции в потоке подключения более эффективно, чем в единственном потоке, который выполняет операцию восстановления буфера пула.
Операции, связанные с сохранением и восстановлением состояния буфера пула, описаны в следующих разделах:
Настройка процента дампинга для страниц буферного пула
Перед дампингом страниц из буферного пула вы можете настроить процент наиболее часто используемых страниц буфера пула, которые вы хотите сохранить, установив параметр innodb_buffer_pool_dump_pct. Если вы планируете дампить страницы буферного пула, когда сервер работает, вы можете динамически настроить этот параметр:
SET GLOBAL innodb_buffer_pool_dump_pct=40;
Если вы планируете дампить страницы буферного пула при завершении работы сервера, установите innodb_buffer_pool_dump_pct в файле конфигурации.
[mysqld]
innodb_buffer_pool_dump_pct=40
Значение по умолчанию innodb_buffer_pool_dump_pct было изменено с 100 (дампить все страницы) на 25 (дампить 25% наиболее часто используемых страниц) в MySQL 5.7, когда innodb_buffer_pool_dump_at_shutdown и innodb_buffer_pool_load_at_startup были включены по умолчанию.
Сохранение состояния буферного пула при завершении работы и его восстановление при запуске
Для сохранения состояния буферного пула при завершении работы сервера выполните следующую команду до завершения работы сервера:
SET GLOBAL innodb_buffer_pool_dump_at_shutdown=ON;
innodb_buffer_pool_dump_at_shutdown включена по умолчанию.
Для восстановления состояния буферного пула при запуске сервера укажите параметр --innodb-buffer-pool-load-at-startup при запуске сервера:
mysqld --innodb-buffer-pool-load-at-startup=ON;
innodb_buffer_pool_load_at_startup включена по умолчанию.
Сохранение и восстановление состояния буфера пула в режиме онлайн
Чтобы сохранить состояние буферного пула, когда сервер MySQL работает, выполните следующую команду:
SET GLOBAL innodb_buffer_pool_dump_now=ON;
Чтобы восстановить состояние буферного пула, когда MySQL работает, выполните следующую команду:
SET GLOBAL innodb_buffer_pool_load_now=ON;
Отображение прогресса дампинга буферного пула
Чтобы отобразить прогресс при сохранении состояния буферного пула на диск, выполните следующую команду:
SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status';
Если операция еще не началась, возвращается «“не начата”». Если операция завершена, выводится время завершения (например, Завершено в 110505 12:18:02). Если операция выполняется, предоставляется информация о статусе (например, Дамп буферного пула 5/7, страница 237/2873).
Отображение прогресса загрузки буферного пула
Чтобы отобразить прогресс при загрузке буферного пула, выполните следующую команду:
SHOW STATUS LIKE 'Innodb_buffer_pool_load_status';
Если операция еще не началась, возвращается «“не начата”». Если операция завершена, выводится время завершения (например, Завершено в 110505 12:23:24). Если операция выполняется, предоставляется информация о статусе (например, Загружено 123/22301 страниц).
Прерывание операции загрузки буферного пула
Чтобы прервать операцию загрузки буферного пула, выполните следующую команду:
SET GLOBAL innodb_buffer_pool_load_abort=ON;
Мониторинг процесса загрузки буфера пула с помощью Performance Schema
Вы можете отслеживать прогресс загрузки буфера пула с помощью Performance Schema.
Следующий пример демонстрирует, как включить инструмент событий стадии stage/innodb/buffer pool load и связанные таблицы потребителей для мониторинга процесса загрузки буфера пула.
Сведения о процедурах дампинга и загрузки буфера пула, используемых в этом примере, см. в разделе 14.8.3.6 «Сохранение и восстановление состояния буфера пула». Сведения об инструментах событий стадии Performance Schema и связанных потребителях см. в разделе 25.12.5 «Таблицы событий стадии Performance Schema».
-
Включить инструмент
stage/innodb/buffer pool load:mysql>
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES'WHERE NAME LIKE 'stage/innodb/buffer%'; -
Включить таблицы потребителей событий стадии, которые включают
events_stages_current,events_stages_historyиevents_stages_history_long.mysql>
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'WHERE NAME LIKE '%stages%'; -
Сделать дамп текущего состояния буфера пула, включив
innodb_buffer_pool_dump_now.mysql>
SET GLOBAL innodb_buffer_pool_dump_now=ON; -
Проверьте статус дампинга буфера пула, чтобы убедиться, что операция завершена.
mysql>
SHOW STATUS LIKE 'Innodb_buffer_pool_dump_status'\G*************************** 1. row *************************** Variable_name: Innodb_buffer_pool_dump_status Value: Buffer pool(s) dump completed at 150202 16:38:58 -
Загрузить буфер пул, включив
innodb_buffer_pool_load_now:mysql>
SET GLOBAL innodb_buffer_pool_load_now=ON; -
Проверьте текущий статус операции загрузки буфера пула, запросив таблицу Performance Schema
events_stages_current. СтолбецWORK_COMPLETEDпоказывает количество загруженных страниц буфера пула. СтолбецWORK_ESTIMATEDпредоставляет оценку оставшейся работы в страницах.mysql>
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM performance_schema.events_stages_current;+-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 5353 | 7167 | +-------------------------------+----------------+----------------+Таблица
events_stages_currentвозвращает пустой набор, если операция загрузки буфера пула завершена. В этом случае вы можете проверить таблицуevents_stages_history, чтобы просмотреть данные завершенного события. Например:mysql>
SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATEDFROM performance_schema.events_stages_history;+-------------------------------+----------------+----------------+ | EVENT_NAME | WORK_COMPLETED | WORK_ESTIMATED | +-------------------------------+----------------+----------------+ | stage/innodb/buffer pool load | 7167 | 7167 | +-------------------------------+----------------+----------------+
Вы также можете отслеживать прогресс загрузки буфера пула с помощью Performance Schema при загрузке буфера пула при запуске с использованием innodb_buffer_pool_load_at_startup. В этом случае инструмент stage/innodb/buffer pool
load и связанные потребители должны быть включены при запуске. Дополнительные сведения см. в разделе 25.3 «Конфигурация запуска Performance Schema».
© 2025 Oracle
Licensed under the GPLv2 License.