Я предоставляю этот ответ в качестве дополнительной информации к ответу Роландо ниже.
Прежде чем сервер находится в производстве
Рассчитайте innodb_buffer_pool_size на основе самых больших таблиц, которые чаще всего используются MySQL. Чтобы идентифицировать самые большие таблицы в зависимости от их размера в базе данных, вы можете использовать этот скрипт:
select table_schema, table_name, round(data_length/1024/1024,2) as size_mb
from information_schema.tables where table_schema like 'my_database'
order by size_mb desc;
+--------------+-------------------------+---------+
| table_schema | table_name | size_mb |
+--------------+-------------------------+---------+
| heavybidder | user | 522.55|
| heavybidder | bid | 121.52|
| heavybidder | item_for_sale | 10.52|
| heavybidder | account_user | 5.02 |
| heavybidder | txn_log | 4.02 |
| heavybidder | category | 0.02 |
+--------------+-------------------------+---------+
Теперь, когда мы знаем, какие таблицы являются самыми большими в нашей базе данных, нам нужно определить, какие из них используются чаще всего. Для этого я бы использовал программу профилирования, такую как 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?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Что такое коэффициент попадания в кэш ключа?
1 - (Key_reads / Key_read_requests)
Обычно я стараюсь получить соотношение как можно ближе к 100%.
Насколько хорошо ваши таблицы помещаются в буферный пул
Вы также можете посмотреть, насколько хорошо данные вашей таблицы вписываются в ваш buffer_pool, обратившись к этой ссылке, которая предоставляет способ показать, «сколько страниц в пуле буферов для данной таблицы (cnt), сколько из них грязно (грязно)» и какой процент индекса умещается в памяти (fit_pct). " Относится только к серверу Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/