Saya memiliki 170GB InnoDB
indeks dan Data.
Saya harus menyesuaikan ukuran innodb_buffer_pool untuk kinerja yang lebih baik. Ukuran tabel Max dari tabel InnoDB (Indeks + data) adalah 28GB.
Jadi apa yang seharusnya menjadi ukuran optimal dari innodb_buffer_pool.
MEMPERBARUI
kita akan memigrasi basis data lokal kita ini ke EC2 sehingga akan mengatur RAM sesuai dengan statistik innodb saat ini. Itu sebabnya saya memerlukan ukuran buffer pool sehingga kita dapat memiliki RAM yang tersedia di sana.
File Per tabel diaktifkan.
Saya menggunakan mesin Linux.
Jawaban:
Tabel terbesar yang Anda miliki merupakan 16,47% (28/170) dari total data. Bahkan jika tabel itu sangat ditulis dan sangat dibaca, tidak semua tabel 28G dimuat dalam buffer pool pada satu saat tertentu. Yang perlu Anda hitung adalah berapa banyak Pool Buffer InnoDB dimuat pada saat tertentu di DB Server saat ini .
Berikut ini adalah cara yang lebih terperinci untuk menentukan innodb_buffer_pool_size untuk DB Server baru mengingat dataset yang saat ini dimuat dalam Pool Buffer Pool InnoDB saat ini dari DB Server.
Jalankan yang berikut di Instance MySQL Anda saat ini (server tempat Anda bermigrasi)
Jalankan formula
IBPPctFull = IBPDataPages * 100.0 / IBPTotalPages
.Jika IBPPctFull adalah 95% atau lebih, Anda harus mengatur innodb_buffer_pool_size menjadi 75% dari RAM Server DB.
Jika IBPPctFull kurang dari 95%, menjalankan rumus ini:
IBPSize = IPS X IBPDataPages / (1024*1024*1024) X 1.05
.Angka untuk IBPSize (dalam GB) adalah angka yang lebih cocok dengan dataset kerja Anda yang sebenarnya.
Sekarang, jika IBPSize masih terlalu besar untuk Konfigurasi RAM Amazon EC2 terbesar, gunakan 75% RAM untuk Amazon EC2 DB Server.
sumber
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:
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?
Apa itu Rasio Hit Tembolok Kunci
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/
sumber