Я надаю цю відповідь як додаткову інформацію до відповіді Роландо нижче.
До того, як сервер виробляється
Обчисліть 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.
Це 32Bit або 64bit система? У системі 32Bit ви обмежені 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/