У меня есть 170 ГБ InnoDB
индекса и данных.
Я должен перенастроить размер innodb_buffer_pool для лучшей производительности. Максимальный размер таблицы таблицы InnoDB (индекс + данные) составляет 28 ГБ.
Итак, какой должен быть оптимальный размер innodb_buffer_pool.
ОБНОВИТЬ
мы собираемся перенести нашу локальную базу данных в ec2, поэтому установим оперативную память в соответствии с текущей статистикой innodb, поэтому мне нужен размер буферного пула, чтобы мы могли иметь доступную оперативную память там.
Файл на таблицу включен.
Я использую Linux-машину.
Ответы:
Самая большая таблица у вас составляет 16,47% (28/170) от общего объема данных. Даже если таблица была хорошо написана и прочитана, не все 28G таблицы загружаются в пул буферов в один данный момент. Вам нужно рассчитать, сколько буферного пула InnoDB загружено в любой момент на текущем сервере БД .
Вот более детальный способ определения innodb_buffer_pool_size для нового Сервера БД с учетом набора данных, загруженного в текущий момент в буферном пуле InnoDB текущего Сервера БД.
Запустите следующее на своем текущем экземпляре MySQL (сервер, с которого вы мигрируете)
Запустите формулу
IBPPctFull = IBPDataPages * 100.0 / IBPTotalPages
.Если IBPPctFull равен 95% или более, вы должны установить innodb_buffer_pool_size равным 75% ОЗУ БД-сервера.
Если IBPPctFull составляет менее 95%, запускать эту формулу:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.Число для IBPSize (в ГБ) - это число, которое больше соответствует вашему фактическому рабочему набору данных.
Теперь, если размер IBPSize все еще слишком велик для самой большой конфигурации Amazon EC2 RAM, используйте 75% RAM для сервера Amazon EC2 DB.
источник
Я предоставляю этот ответ в качестве дополнительной информации к ответу Роландо ниже.
Прежде чем сервер находится в производстве
Рассчитайте innodb_buffer_pool_size на основе самых больших таблиц, которые чаще всего используются MySQL. Чтобы идентифицировать самые большие таблицы в зависимости от их размера в базе данных, вы можете использовать этот скрипт:
Теперь, когда мы знаем, какие таблицы являются самыми большими в нашей базе данных, нам нужно определить, какие из них используются чаще всего. Для этого я бы использовал программу профилирования, такую как Jet Profiler (JP), чтобы посмотреть, к каким таблицам обращаются чаще всего. JP покажет вам, к каким таблицам обращаются чаще всего. Вот скриншот из этого раздела в JP
Поэтому теперь я знаю, что таблицы пользователей и ставок занимают около 640 МБ дискового пространства, они очень часто используются в соответствии с JP, а это означает, что MySQL будет хранить свои индексы и данные в буферном пуле как Rolando. упоминает ниже в своих комментариях.
Чтобы убедиться, что в MySQL достаточно памяти для хранения данных для моих самых больших и наиболее часто используемых таблиц, я бы определил innodb_buffer_pool_size размером 640 МБ.
Есть некоторые дополнительные соображения, но они не относятся к innodb_buffer_pool_size.
Это 32-битная или 64-битная система? В 32-битной системе вы ограничены 4 ГБ, если не активируете PAE. В Windows это означает использование выпусков Windows Enterprise или Datacenter.
Сколько памяти нужно другим процессам, работающим в вашей системе? На выделенном сервере MySQL я оставлю от 5% до 10% для ОС. В Windows вы можете использовать Process Explorer для анализа использования памяти. В Linux у вас есть sysstat, free, htop, top и vmstat.
База данных состоит только из таблиц Innodb или смеси Innodb и MyISAM? Если это смесь из двух, то я выделю память для key_cache, переменных объединения, кеша запросов и т. Д. Позже вы сможете рассчитать коэффициент попадания MyISAM, когда сервер будет запущен.
После того, как сервер находится в производстве
Каков текущий коэффициент попадания для Innodb?
Что такое коэффициент попадания в кэш ключа?
Обычно я стараюсь получить соотношение как можно ближе к 100%.
Насколько хорошо ваши таблицы помещаются в буферный пул
Вы также можете посмотреть, насколько хорошо данные вашей таблицы вписываются в ваш buffer_pool, обратившись к этой ссылке, которая предоставляет способ показать, «сколько страниц в пуле буферов для данной таблицы (cnt), сколько из них грязно (грязно)» и какой процент индекса умещается в памяти (fit_pct). " Относится только к серверу Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/
источник