Я бы все равно установил innodb_buffer_pool_size намного выше, чем 400M. Причина? InnoDB Buffer Pool по-прежнему будет кэшировать данные и страницы индекса, необходимые для часто используемых таблиц.
Запустите этот запрос, чтобы получить рекомендованный размер innodb_buffer_pool_size в МБ:
ВЫБРАТЬ КОНКАТ (КРУГЛЫЙ (KBS / POWER (1024, IF (pw <0,0, IF (pw> 3,0, pw))) + 0,49999), SUBSTR ('KMG', IF (pw <0, 0, IF (pw> 3,0, pw)) + 1,1)) рекомендованный_innodb_buffer_pool_size FROM (ВЫБРАТЬ СУММУ (data_length + index_length) KBS FROM information_schema.tables WHERE engine = 'InnoDB') A, (ВЫБРАТЬ 2 pw) B;
Просто используйте результат этого запроса или 80% установленной оперативной памяти (в вашем случае 19660M), в зависимости от того, что меньше.
Я бы также установил для innodb_log_file_size значение 25% от размера пула буферов InnoDB. К сожалению, максимальное значение innodb_log_file_size составляет 2047M. (1M меньше 2G) Таким образом, установите innodb_log_file_size в 2047M, так как 25% от innodb_buffer_pool_size моего рекомендованного параметра составляет 4915M.
Еще одна рекомендация - отключить соответствие ACID . Используйте 0 или 2 для innodb_flush_log_at_trx_commit (по умолчанию 1, что поддерживает соответствие ACID). Это приведет к более быстрой записи InnoDB НА РИСК потери транзакций стоимостью до 1 секунды в случае сбоя.