У меня есть машина на 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.