С ростом перезапуск MySQL может превратиться в очень неприятный процесс. Вам нужно поменять всего одну настройку, а вы ждете 10…20 минут, пока БД перезапустится.
На скорость выключения и включения MySQL большое влияние оказывает движок InnoDB. А именно два его компонента:
С ростом базы данных эти настройки обычно увеличивают для повышения производительности. Но вместе с этим увеличивается и время перезапуска сервера.
Если вы обновите какую-то строку в какой-то таблице, Mysql сделает следующее:
Так обеспечивается производительность, ведь базе данных не приходится выполнять дорогие операции random-записи на диск сразу. Позже, когда буфер будет переполнен, Mysql начнет “сбрасывать грязные” страницы на диск – записывать изменения из буфера в файлы таблиц на диске.
mysql> SHOW GLOBAL STATUS LIKE '%pages_d%'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | Innodb_buffer_pool_pages_data | 1507306 | | ***Innodb_buffer_pool_pages_dirty*** | ***143393*** | +--------------------------------+---------+
## Количество грязных страниц в буфере
Как видим, количество грязных страниц составляет около 10% всего буфера. И если размер небольшой – это может быть несколько десятков мегабайт. В .io, в некоторых конфигурациях мы используем размеры буфера в 48Гб. Это означает, что размер грязных страниц составит приблизительно 5Гб.
Перед выключением Mysql обязательно сбросит все грязные страницы на диск. Отсюда и очень долгое время выключения.
В Mysql 5.7 есть настройка innodb_max_dirty_pages_pct, которая позволяет регулировать количество грязных страниц в памяти. Mysql будет чаще сбрасывать грязные страницы во время работы, если установить значение поменьше:
mysql> SET GLOBAL innodb_max_dirty_pages_pct = 1;
## Установим лимит грязных страниц в 1%
Сразу после обновления этой настройки мы увидим, что количество грязных страниц постепенно уменьшится:
mysql> SHOW GLOBAL STATUS LIKE '%pages_d%'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | Innodb_buffer_pool_pages_data | 1507306 | | **Innodb_buffer_pool_pages_dirty** | **19758** | +--------------------------------+---------+
## Значение будет постепенно уменьшаться до предела в 1%
Теперь время выключения Mysql значительно снизится.
Сразу после запуска Mysql может очень медленно работать от нескольких минут до нескольких часов. И это при стандартной нагрузке. Это происходит потому, что какое-то время уходит на разогрев буфера. В течение этого времени буфер не наполнен, и Mysql читает множество данных напрямую с диска.
Начиная с версии 5.7 Mysql позволяет настроить включить две опции:
innodb_buffer_pool_dump_at_shutdown = ON
## Включается в my.cnf
Этот параметр сбрасывает содержимое буфера на диск перед выключением. Так, во время включения, Mysql сможет быстро загрузить этот же буфер обратно в память. Операция эта очень эффективна, т.к. сам буфер не копируется, а сохраняются только адреса страниц на диске.
innodb_buffer_pool_load_at_startup = ON
## Тоже включается в my.cnf
Этот параметр загружает содержимое буфера с диска сразу после включения. Эта операция не блокирует запуск сервера, а выполняется на фоне. Поэтому она никак не замедлит скорость запуска. А вот скорость возврата к нормальной работе увеличится в несколько раз.
<h2>TL;DR
Чтобы ускорить время выключения Mysql, сократите количество грязных страниц в памяти:
mysql> SET GLOBAL innodb_max_dirty_pages_pct = 1;
Для ускорения запуска включайте опции быстрого сброса и восстановления буфера:
innodb_buffer_pool_dump_at_shutdown = ON
innodb_buffer_pool_load_at_startup = ON
Эти настройки предназначены для баз данных, использующих движок InnoDB и 5.7+ версию Mysql.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…