Назад | Перейти на главную страницу

Mysql динамический размер буферного пула InnoDB

Начиная с версии 5.7, можно установить "динамические" размеры пула буферов с помощью:

innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances

Как именно это работает? У меня довольно небольшой сервер с 4 ядрами и 16 ГБ ОЗУ с бизнес-приложением PHP на нем. Теперь я разместил 8 ГБ в качестве статического буфера пула (около 70-80% эффективности ключа и 99% использования буфера).

На сервере также есть Java MassMailer, который запускается в среднем один раз в день, поэтому я оставляю около 8 ГБ для почтовой программы. Я запрограммировал MassMailer таким образом, чтобы он загружал столько писем, сколько позволяет память.

Могу ли я использовать эту новую функцию динамического пула буферов, чтобы выделить во время нормальной рабочей нагрузки около 12 ГБ и занять некоторое время при отправке писем? Могу ли я настроить это вручную или сервер MySQL делает это автоматически? Вернет ли сервер некоторую память, если почтовая программа захочет большего, или будет выдано исключение "нехватки памяти"?

Параметр chunk_size предназначен для динамического изменения innodb_buffer_pool_size. Я не вижу смысла изменять buffer_pool_size кроме экспериментов.

Объем памяти:

  • 16 ГБ оперативной памяти
  • 8 ГБ для Java - включает ли это использование Java, кроме MassMailer?
  • Остается 8 ГБ для MySQL.
  • Установите buffer_pool примерно на 70% от этого, а именно 5.6G.
  • Если вы видите свопинг, то буфер buffer_pool следует уменьшить.
  • Динамическое изменение buffer_pool_size заблокирует активность MySQL (до некоторой степени).

Если вы динамически предоставляете MySQL больше места, вам необходимо одновременно отнимать оперативную память у Java. Это кажется слишком неуклюжим и подверженным ошибкам для попытки.

Я ожидал, что программа рассылки будет привязана к сети, поэтому попытки оптимизировать ОЗУ, вероятно, не имеют смысла.

(Вопросы администратора базы данных MySQL находятся на dba.stackexchange.com,)