Начиная с версии 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 кроме экспериментов.
Объем памяти:
5.6G
.Если вы динамически предоставляете MySQL больше места, вам необходимо одновременно отнимать оперативную память у Java. Это кажется слишком неуклюжим и подверженным ошибкам для попытки.
Я ожидал, что программа рассылки будет привязана к сети, поэтому попытки оптимизировать ОЗУ, вероятно, не имеют смысла.
(Вопросы администратора базы данных MySQL находятся на dba.stackexchange.com,)