Назад | Перейти на главную страницу

Выбор подходящего innodb_buffer_pool_size

У меня есть машина на 24 ГБ с MySQL (только таблицы InnoDB).

Мой набор данных innodb составляет 11,5 ГБ, и я установил свой innodb_buffer_pool_size на 14 ГБ, чтобы позволить некоторый рост. Таким образом, весь набор данных innodb загружается в оперативную память, и это хорошо.

Но сегодня я заметил, что размер моих индексов также превышает 11 ГБ.

Было бы неплохо увеличить мой innodb_buffer_pool_size, чтобы пространство индекса тоже подходило? Или это не при чем?

Не забывайте, что буферный пул InnoDB содержит данные и индексы

Пожалуйста, запустите этот запрос

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size 
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables 
WHERE engine='InnoDB') A, 
(SELECT 3 PowerOf1024) B;

Это покажет вам, насколько большим должен быть пул буферов InnoDB. Поскольку у вас только 24 ГБ установленной оперативной памяти, innodb_buffer_pool_size должен быть 18 ГБ (75% установленной оперативной памяти) или предложением запроса, в зависимости от того, что меньше.

Было бы неплохо увеличить мой innodb_buffer_pool_size, чтобы пространство индекса тоже подходило?

Да, было бы.

Если размер ваших данных составляет 11,5 ГБ, а ваши индексы превышают 11 ГБ, возможно, у вас слишком много или неправильно проиндексированных данных, и вы можете попросить кого-нибудь взглянуть на это.

Если это выделенная система для mysql с 24 ГБ ОЗУ, вы даже можете попробовать увеличить innodb_buffer_pool_size до 20 ГБ. Я заметил, что если размер ОЗУ превышает 16 ГБ, мы можем пропорционально увеличить innodb_buffer_pool_size за пределы правила большого пальца 75% от размера ОЗУ. Я задокументировал некоторые из своих наблюдений в этом блог а также предоставили онлайн-калькулятор innodb_buffer_pool_size.