Podaję tę odpowiedź jako informację uzupełniającą do odpowiedzi Rolando poniżej.
Przed rozpoczęciem produkcji serwera
Oblicz innodb_buffer_pool_size na podstawie największych tabel najczęściej używanych przez MySQL. Aby zidentyfikować największe tabele na podstawie ich wielkości w bazie danych, możesz użyć tego skryptu:
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 |
+--------------+-------------------------+---------+
Teraz, gdy wiemy, które tabele są największe w naszej bazie danych, musimy ustalić, które są najczęściej używane. Aby to zrobić, użyłbym programu do profilowania, takiego jak Jet Profiler (JP), aby sprawdzić, które tabele są najczęściej używane. JP pokaże Ci, które tabele są najczęściej używane. Oto zrzut ekranu z tej sekcji w JP
Mając to na uwadze, teraz wiem, że tabele użytkowników i stawek zajmują około 640 MB miejsca na dysku, są bardzo często używane zgodnie z JP, co oznacza, że MySQL będzie przechowywać swoje indeksy i dane w puli buforów jako Rolando wspomina poniżej w swoich komentarzach.
Aby upewnić się, że MySQL ma wystarczającą ilość pamięci do przechowywania danych dla moich największych i najczęściej używanych tabel, zdefiniowałbym innodb_buffer_pool_size na 640 MB.
Istnieją pewne dodatkowe uwagi, ale nie dotyczą one rozmiaru innodb_buffer_pool_size.
Czy to system 32-bitowy czy 64-bitowy? W systemie 32-bitowym jesteś ograniczony do 4 GB, chyba że aktywujesz PAE. W systemie Windows oznacza to uruchamianie wersji Windows Enterprise lub Datacenter.
Ile pamięci potrzebują inne procesy uruchomione w systemie? Na dedykowanym serwerze MySQL pozostawię od 5% do 10% na system operacyjny. W systemie Windows możesz użyć Process Explorer do analizy zużycia pamięci. W Linuksie masz sysstat, free, htop, top i vmstat.
Czy baza danych składa się tylko z tabel Innodb czy mieszanki Innodb i MyISAM? Jeśli jest to mieszanka tych dwóch elementów, odłożę pamięć na pamięć podręczną_klucza, połącz zmienne, pamięć podręczną zapytań itp. Możesz później obliczyć współczynnik trafień MyISAM po uruchomieniu serwera.
Po uruchomieniu serwera
Jaki jest obecny współczynnik trafień dla Innodb?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Jaki jest współczynnik trafień w pamięć podręczną kluczy
1 - (Key_reads / Key_read_requests)
Zazwyczaj staram się uzyskać stosunek tak bliski 100%, jak to możliwe.
Jak dobrze twoje tabele mieszczą się w puli buforów
Możesz także sprawdzić, jak dobrze dane tabeli mieszczą się w puli buffer_pool, odwołując się do tego linku, który pozwala pokazać, „ile stron w puli buforów dla danej tabeli (cnt), ile z nich jest brudnych (brudnych) , a jaki procent dopasowań indeksu mieści się w pamięci (fit_pct). " Dotyczy tylko serwera Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/