Karakteristik Server
- Total sistem RAM: 8GB (menjalankan MySQL + hal lain selain MySQL di atasnya yaitu tidak didedikasikan untuk MySQL)
- Jumlah Core CPU: 6
- Saya memiliki data dalam db sebesar sekitar 2GB
- Saya memiliki Ukuran Penyangga InnoDB yang diatur ke 4GB
Mana yang lebih baik:
- Contoh Innodb Buffer Pool diatur ke 1?
- Contoh Innodb Buffer Pool diatur ke 2 (masing-masing 2GB)?
- Contoh Innodb Buffer Pool diatur ke 4 (masing-masing 1GB)?
- Contoh Innodb Buffer Pool diatur ke 8 (pengaturan default)
Jadi saya tidak yakin bagaimana alasannya ketika datang ke Buffer Pool Instances dan juga keseluruhan "menggunakan instance atau menderita OS Swap ketika memiliki Ukuran Pool Buffer InnoDB yang besar".
mysql
innodb
buffer-pool
Adergaard
sumber
sumber
Jawaban:
Ketika saya kembali ke MySQL 5.5, saya akan memikirkan hal yang sama.
Apa yang saya pelajari selama bertahun-tahun adalah sebagai berikut: Jika Buffer Pool lebih besar dari setengah RAM yang terpasang dan innodb_buffer_pool_instances adalah 1 (default untuk 5.5), ancaman bertukar selalu dekat.
Saya membahas ini sebelumnya: Apakah ada aturan praktis mengenai ukuran dan jumlah instance buffer pool? . Dalam posting itu, saya menyebutkan contoh klien yang memiliki RAM 192GB di server dengan Penyangga Pool 162GB. Ketika innodb_buffer_pool_inances berumur 1, bertukar terjadi. Ketika saya mengatur innodb_buffer_pool_inances ke 2, segalanya menjadi jauh lebih baik.
Dalam kasus Anda, karena Kelompok Penyangga tepat setengah, nilai 1 mungkin OK. Saya tidak akan kebetulan. Saya akan mengaturnya menjadi 2.
Karena MySQL 5.6 memiliki default 8, Anda tidak perlu memikirkannya lagi.
Saya akan mengatakan ini: jawaban akuzminsky memiliki prinsip tertinggi . Jawaban saya hanya menembak dari pinggul berdasarkan pengalaman masa lalu (baik dan buruk).
sumber
Jumlah instance buffer pool harus ditingkatkan untuk menghindari pertikaian mutex pool buffer.
Dengan ukuran buffer pool 8GB saya ragu Anda akan melihat pertentangan mutex pool buffer.
PEMBARUAN 0 :
Saya menyebutkan buffer pool 8Gb dalam jawaban sementara dalam pertanyaan awal total memori adalah 8GB. Tentu, buffer pool harus kurang dari 8GB. 4GB terdengar seperti awal yang baik tetapi pastikan tidak terjadi pertukaran.
PEMBARUAN 1 :
// dari slide Yasufumi (dalam versi MySQL terbaru, output mungkin sedikit berbeda)
Untuk menentukan apakah ada pertikaian pada pool kumpulan mutex, kumpulkan selusin
SHOW ENGINE INNODB STATUS
sampel selama waktu puncak.Kemudian agregat menggunakan snippet shell:
yang memberikan output seperti ini:
Jika Anda melihat jumlah tinggi mutex pool penyangga menunggu, maka inilah saatnya untuk mempertimbangkan beberapa instance pool penyangga. Perselisihan tidak mungkin terjadi pada buffer pool yang lebih kecil dari ~ 48G.
sumber
Set "swappiness" ke 1 jika OS Anda memiliki itu. Masalahnya mungkin OOM terlalu agresif.
sumber
Saya akan menyarankan pengaturan ini agar sesuai dengan jumlah maksimum utas MySQL yang ingin Anda jalankan secara bersamaan. Saya menggunakan jumlah core.
Saya juga mengatur
innodb_read_io_threads
daninnodb_write_io_threads
mencocokkan nomor ini.Jika
innodb_buffer_pool_instances
terlalu rendah, utas Anda kemungkinan akan terjebak dalam menunggu semafor. Ini membuat CPU dan I / O tampak idle, meskipun sistem harus sibuk - dan latensi aplikasi Anda akan meningkat.sumber