Sto fornendo questa risposta come informazioni complementari alla risposta di Rolando di seguito.
Prima che il server sia in produzione
Calcola innodb_buffer_pool_size in base alle tabelle più grandi utilizzate più spesso da MySQL. Per identificare le tabelle più grandi in base alle loro dimensioni nel database è possibile utilizzare questo script:
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 |
+--------------+-------------------------+---------+
Ora che sappiamo quali sono le tabelle più grandi nel nostro database, dobbiamo determinare quali sono le più utilizzate. Per fare ciò, vorrei utilizzare un programma di profilazione come Jet Profiler (JP) per vedere quali tabelle hanno più accesso. JP ti mostrerà a quali tabelle accedi più frequentemente. Ecco uno screenshot da quella sezione in JP
Quindi, con questo in mente, ora so che le tabelle degli utenti e delle offerte occupano circa 640 MB di spazio su disco, sono molto frequentemente utilizzate secondo JP e ciò significa che MySQL memorizzerà i loro indici e dati nel pool di buffer come Rolando menzioni di seguito nei suoi commenti.
Per assicurarmi che MySQL avesse memoria sufficiente per archiviare i dati per le mie tabelle più grandi e utilizzate più frequentemente, definirei innodb_buffer_pool_size a 640 MB.
Ci sono alcune considerazioni aggiuntive, ma non si applicano a innodb_buffer_pool_size.
È un sistema a 32 bit o 64 bit? In un sistema a 32 bit, sei limitato a 4 GB a meno che non attivi PAE. In Windows, ciò significa eseguire le versioni di Windows Enterprise o Datacenter.
Di quanta memoria hanno bisogno gli altri processi in esecuzione sul sistema? Su un server MySQL dedicato, lascerò tra il 5% e il 10% per il sistema operativo. In Windows è possibile utilizzare Process Explorer per analizzare l'utilizzo della memoria. In Linux, hai sysstat, free, htop, top e vmstat.
Il database è composto solo da tabelle Innodb o da una combinazione di Innodb e MyISAM? Se si tratta di una combinazione dei due, accantonerò la memoria per key_cache, unirò le variabili, interrogherai la cache, ecc. Successivamente potrai calcolare il tuo hit ratio di MyISAM una volta che il server è in produzione.
Dopo che il server è in produzione
Qual è l'attuale hit ratio di Innodb?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Qual è il rapporto di hit della cache chiave
1 - (Key_reads / Key_read_requests)
In genere cerco di ottenere il rapporto il più vicino possibile al 100%.
In che misura le tabelle si adattano al pool di buffer
Puoi anche vedere come i tuoi dati della tabella si adattano al tuo buffer_pool facendo riferimento a questo link, che fornisce un modo per mostrare "quante pagine sono nel pool di buffer per una data tabella (cnt), quante sono sporche (sporche) e qual è la percentuale di indice adatta nella memoria (fit_pct). " Si applica solo al server Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/