Способ настройки InnoDB сосредоточен вокруг
- InnoDB Buffer Pool: кэширует страницы данных и страницы индекса. Объем данных и индекса, который вы можете кэшировать, является не функцией ограничений дискового пространства, а функцией доступной памяти и дискового пространства, которые в настоящее время используются InnoDB.
- Метаданные InnoDB: по умолчанию файл ibdata1 обычно содержит все и вся InnoDB. Это будет включать страницы данных, страницы индекса, метаданные таблицы, данные MVCC .
Вот формула, которую я использовал в течение последних 5 лет для вычисления пула буферов InnoDB на основе дискового пространства, используемого страницами данных и индексов InnoDB :
SELECT CONCAT(ROUND(KBS/POWER(1024,IF(Power1024<0,0,
IF(Power1024>3,0,Power1024)))+0.49999),SUBSTR(' KMG',IF(Power1024<0,0,
IF(Power1024>3,0,Power1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,(SELECT 2 Power1024) B;
- Использовать (ВЫБРАТЬ 0 Power1024) для байтов
- Использовать (ВЫБРАТЬ 1 Power1024) для КБ
- Использовать (ВЫБРАТЬ 2 Power1024) для МБ
- Использовать (ВЫБРАТЬ 3 Power1024) для ГБ
- Используйте (ВЫБРАТЬ 4 Power1024) для ТБ (напишите мне, если у вас есть TerraBytes RAM)
Конечно, я сказал, что функция доступной памяти и дискового пространства в настоящее время используется InnoDB. Отсюда, просто используйте здравый смысл. Рекомендуемое число из вышеприведенного запроса не должно превышать 75% установленной оперативной памяти !!! Это простое практическое правило для определения размера пула буферов InnoDB.
Вам также следует установить innodb_flush_method в O_DIRECT, поскольку он обеспечит стабильную синхронную запись InnoDB. Я также написал пост о том, как оптимизировать дисковое хранилище для InnoDB .
Что касается сообщения Таблица не поддерживает оптимизацию, вместо этого выполняется воссоздание + анализ , то причина, по которой вы получаете это сообщение об ошибке, заключается в том, что механизм хранения - InnoDB. Механически OPTIMIZE TABLE просто копирует таблицу во временную таблицу и выполняет ANALYZE TABLE .
В действительности, ANALYZE TABLE против InnoDB совершенно бесполезен. Даже если вы запустили ANALYZE TABLE для таблицы InnoDB, механизм хранения InnoDB снова и снова выполняет погружения в индекс для приближений мощности, таким образом уничтожая только что скомпилированную статистику. Фактически, Percona провела несколько тестов на ANALYZE TABLE и пришла к тому же выводу .
Вот другие сообщения, которые я сделал за год о настройке InnoDB