Я запускаю виртуальный сервер с установленной на нем Owncloud. Теперь у Owncloud есть проблема, заключающаяся в том, что при нынешней разработке каждая загрузка файла вызывает небольшие накладные расходы MySql.
Поэтому очень важно настроить базу данных MySql как можно лучше. В сети много людей, которые рекомендуют очень большой innodb_buffer_pool_size
до 4, 5 и более Гбайт, да некоторые даже говорят, что до 70-80% от общего объема оперативной памяти, а?
Ну, но мало кто возражает против второго параметра под названием innodb_buffer_pool_instances
Итак, давайте посмотрим на мою ситуацию. Моя виртуальная машина имеет ограниченные ресурсы. Это означает, что общий объем оперативной памяти 6400 ГБ и около 3000 в обычном режиме (обрабатывается libvirt). Итак, если я установил innodb_buffer_pool_instances
на более чем 1 или пусть это в конфигурации по умолчанию новых серверов MySql (8 или что-то в этом роде) означает (если я правильно понял) в худшем случае, например innodb_buffer_pool_instances = 4
и innodb_buffer_pool_size = 4
=> 4 * 4 = использование оперативной памяти 16 ГБ в максимальных ситуациях. То, что может привести к неправильному использованию диска подкачки и каждому использованию подкачки для буфера MySql innodb, является излишним для любой производительности.
Вывод простой. Доступный размер буфера должен быть меньше, чем, по крайней мере, я бы сказал, примерно в 70% доступной оперативной памяти, а остальное может потребоваться для php, apache и самой системы.
Итак, какие решения были бы лучше. Только один возможный innodb_buffer_pool_instances
но очень большой innodb_buffer_pool_size
или лучше меньше innodb_buffer_pool_size
и поэтому больше innodb_buffer_pool_instances
в то же время при необходимости.
Мой сервер используют максимум от 10 до 30 человек.
innodb_buffer_pool_instances:
Вы не можете увидеть его эффект, если innodb_buffer_pool_size
несколько гигабайт, разделение пула буферов на отдельные экземпляры может повысить эффективность. Это также практика настройки для innodb_buffer_pool_instance
так что каждый экземпляр пула буферов имеет размер не менее 1 ГБ.
например, если innodb_buffer_pool_size = 4 ГБ, то innodb_buffer_pool_instances = 4
MySQL 5.6 имеет значение по умолчанию 8
innodb_buffer_pool_size должен быть 80% ОЗУ
Идея предназначена только для выделенного сервера MySQL, на котором не запущены другие процессы. С другой стороны, буферный пул не должен быть меньше и иметь достаточно оперативной памяти. Также необходимо проверить, является ли система 64/32-битной.
Я думаю, что лучшие практики для этого довольно понятны в ссылке: https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_buffer_pool_instances
Если значения innodb_buffer_pool_size кратны ГБ, мы можем увеличить innodb_buffer_pool_instances до числа, чтобы у каждого экземпляра было не менее 1 ГБ. Также для выделенных систем, работающих под управлением mysql, innodb_buffer_pool_size может быть установлен на основе доступной системной RAM. Это может не совсем соответствовать правилу большого пальца 70-80%. Я исследовал оптимальные значения для этого на основе системной RAM и построил калькулятор для вычисления innod_db_buffer_pool_size, который доступен как часть сообщения в блоге: https://scalegrid.io/blog/calculating-innodb-buffer-pool-size-for-your-mysql-server/