Saya memberikan jawaban ini sebagai informasi pelengkap untuk jawaban Rolando di bawah ini.
Sebelum server dalam produksi
Hitung innodb_buffer_pool_size berdasarkan tabel terbesar yang paling sering digunakan oleh MySQL. Untuk mengidentifikasi tabel terbesar berdasarkan ukurannya di database, Anda dapat menggunakan skrip ini:
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 |
+--------------+-------------------------+---------+
Sekarang kita tahu tabel mana yang terbesar di basis data kita, kita perlu menentukan yang mana yang paling sering digunakan. Untuk melakukan itu, saya akan menggunakan program profil seperti Jet Profiler (JP) untuk melihat tabel mana yang paling banyak diakses. JP akan menunjukkan kepada Anda tabel mana yang paling sering diakses. Ini screenshot dari bagian itu di JP
Jadi dengan mengingat hal ini, saya sekarang tahu bahwa tabel pengguna dan tawaran membutuhkan sekitar 640MB ruang disk, mereka sangat sering digunakan menurut JP dan yang berarti bahwa MySQL akan menyimpan indeks dan data mereka dalam buffer pool sebagai Rolando menyebutkan komentarnya di bawah ini.
Untuk memastikan MySQL memiliki cukup memori untuk menyimpan data untuk tabel terbesar dan paling sering saya gunakan, saya kemudian akan mendefinisikan innodb_buffer_pool_size pada 640MB.
Ada beberapa pertimbangan tambahan, tetapi mereka tidak berlaku untuk innodb_buffer_pool_size.
Apakah ini sistem 32bit atau 64bit? Dalam sistem 32Bit, Anda dibatasi hingga 4GB kecuali Anda mengaktifkan PAE. Di Windows, ini berarti menjalankan edisi Windows Enterprise atau Datacenter.
Berapa banyak memori yang diperlukan oleh proses lain yang berjalan pada sistem Anda? Pada server MySQL khusus, saya akan meninggalkan antara 5% dan 10% untuk OS. Di Windows Anda dapat menggunakan Process Explorer untuk menganalisis penggunaan memori. Di Linux, Anda memiliki sysstat, gratis, htop, atas dan vmstat.
Apakah database hanya terdiri dari tabel Innodb atau gabungan dari Innodb dan MyISAM? Jika ini adalah campuran keduanya, maka saya akan menyisihkan memori untuk key_cache, bergabung dengan variabel, cache permintaan, dll. Anda kemudian dapat menghitung rasio hit MyISAM Anda setelah server diproduksi.
Setelah server dalam produksi
Berapa rasio hit saat ini untuk Innodb?
1 - (innodb_buffer_pool_reads / innodb_buffer_pool_read_requests).
Apa itu Rasio Hit Tembolok Kunci
1 - (Key_reads / Key_read_requests)
Saya biasanya mencoba untuk mendapatkan rasio sedekat mungkin dengan 100%.
Seberapa baik tabel Anda masuk dalam buffer pool
Anda juga dapat melihat seberapa baik data tabel Anda cocok di buffer_pool Anda dengan merujuk ke tautan ini, yang menyediakan cara untuk menunjukkan "berapa banyak halaman dalam buffer pool untuk tabel yang diberikan (cnt), berapa banyak dari mereka yang kotor (kotor) , dan berapa persentase indeks yang sesuai dengan memori (fit_pct). " Berlaku hanya untuk server Percona
http://www.mysqlperformanceblog.com/2010/12/09/how-well-does-your-table-fits-in-innodb-buffer-pool/