Усовершенствования производительности InnoDB

Я переключаю большую таблицу на InnoDB из myISAM. Было много дискуссий о том, почему переключение имеет смысл, но не так много о том, КАК это делать, убедившись, что таблица хорошо работает.

Предполагая, что у меня будут таблицы InnoDB и MyISAM в базе данных, есть ли параметры, которые я должен изменить в файле conf conf MySQL, чтобы повысить производительность?

Любые другие значения по умолчанию, которые могут быть связаны с настройкой производительности?

Ответ 1

В вашем innodb_buffer_pool_size должно быть указано количество данных и индексов InnoDB, которые у вас есть. Запустите этот запрос, и он сообщит вам минимально рекомендуемый параметр для mysql current Innodb Data​​p >

SELECT CONCAT(ROUND(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)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables WHERE
engine='InnoDB') A,(SELECT 3 pw) B;

Если ваши данные InnoDB намного превышают установленную ОЗУ на сервере БД, я рекомендую 75% установленной ОЗУ на ящике. Итак, если у вас есть сервер с 16 ГБ, используйте 12G как innodb_buffer_pool_size.

Вы также должны указать innodb_log_file_size на 25% от innodb_buffer_pool_size или 2047M, что когда-либо меньше. Чтобы изменить файл ib_logfile0 и ib_logfile1, вы должны:

mysql -uroot -p -e"SET GLOBAL innodb_fast_shutdown = 0;"
service mysql stop
rm ib_logfile0 ib_logfile1
service mysql start

Если вы используете MySQL 5.5, установите следующее:

innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_io_capacity=20000 (set this to your device IOPs)

Если вы сохраните данные MyISAM, запустите этот запрос для идеальной настройки для key_buffer_size:

SELECT CONCAT(ROUND(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)) recommended_key_buffer_size
FROM (SELECT SUM(index_length) KBS FROM information_schema.tables
WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A,
(SELECT 3 pw) B;

ОБНОВЛЕНИЕ 2013-02-13 12:55 EDT

В последнее время я научился не устанавливать innodb_io_capacity очень сильно, если вообще. Это особенно актуально для товарного оборудования и виртуальных машин: