Bagaimana Anda menyetel MySQL untuk beban kerja InnoDB yang berat?

39

Dengan asumsi sistem OLTP produksi dengan tabel terutama InnoDB

  • Apa saja gejala umum dari sistem yang salah konfigurasi / salah konfigurasi?
  • Parameter konfigurasi apa yang paling sering Anda ubah dari standarnya?
  • Bagaimana Anda melihat potensi kemacetan sebelum ada masalah?
  • Bagaimana Anda mengenali dan memecahkan masalah yang aktif?

Anekdot yang merinci statusvariabel dan diagnostik tertentu akan dihargai.

Riedsio
sumber
2
Pertanyaan ini sangat luas. Bisakah Anda membaginya menjadi 4 pertanyaan? (Dan bahkan pertanyaan-pertanyaan Anda yang sangat luas. Dapatkah Anda membuat instantiasinya dengan masalah khusus Anda?)
Brian Ballsun-Stanton

Jawaban:

16

Berikut ini adalah artikel yang bagus tentang penyetelan InnoDB dari Sun's Jenny Chen - dia banyak menulis blog tentang MySQL, beberapa di antaranya adalah khusus Solaris (misalnya menggunakan DTrace ) tetapi seluruh blog penuh dengan berita menarik.

Gayus
sumber
4
Siapakah Jenny Chen?
Pacerier
19

Menariknya, di MySQL 5.5, Anda sekarang dapat memiliki beberapa kolam buffer innodb.

Parameter yang Anda pedulikan adalah

Dalam sekitar satu bulan, saya dijadwalkan untuk mengimplementasikan 112 kolam buffer innodb untuk klien. Saya akan memberi tahu Anda bagaimana hasilnya.

UPDATE 2011-02-27 21:57 EDT

Saya menemukan nilai maks untuk innodb_buffer_pool_instances adalah 64, saya memutuskan untuk mengkonfigurasi 144 GB, jadi saya menetapkan innodb_buffer_pool_instances menjadi 18 dan innodb_buffer_pool_size menjadi 8. Saya saat ini memuat server dengan 450GB

UPDATE 2011-04-28 13:44 EDT

Saya mencoba beberapa Kolam Buffer InnoDB. Ada terlalu banyak penguncian threading dan pertikaian. Saya mengubah ke Buffer Pool + pengaturan 162GB tunggal read_io_threads dan write_io_threads menjadi 64 (nilai maksimum). Ini bekerja jauh lebih baik.

UPDATE 2012-07-03 17:27 EDT

Saya belajar sesuatu yang luar biasa tentang MySQL. Jika Anda mengalokasikan satu Buffer Pool InnoDB monolitik tunggal yang lebih besar dari Total Installed Dibagi Dengan Jumlah CPU Fisik , Anda akan menghasut OS untuk pertukaran memori interval reguler karena Pool Buffer InnoDB penuh. Opsi MySQL 5.5 yang dikenal sebagai innodb_buffer_pool_instances dapat digunakan untuk membagi kumpulan buffer. Kemarin, saya menerapkan ini dengan benar untuk klien yang saya sebutkan dalam jawaban saya tahun lalu. Saya masih memiliki 162GB untuk Buffer Pool klien. Saya telah mengatur opsi innodb_buffer_pool_inances server menjadi 2 karena setiap DB Server adalah dual hexacore. Saya berpikir untuk mengaturnya menjadi 12 tetapi kemudian seorang rekan menunjukkan kepada saya sebuah blog dari Jeremy Cole di MySQL dan Swappiness. Setelah membacanya, saya langsung mempraktikkannya untuk klien saya. Saya menjalankan perintah ini

numactl --hardware

Saya melihat pemetaan 192GB RAM server sebagai 96GB untuk setiap inti fisik. Oleh karena itu, saya mengatur innodb_buffer_pool_inances ke 2. Semuanya terlihat baik sekarang. Saya akan memperbarui jawaban saya untuk melihat bagaimana ini mempengaruhi pertukaran memori untuk 2 bulan berikutnya.

RolandoMySQLDBA
sumber
hai @Rando_MySQLDBA, dari blog jeremy saya tidak dapat menemukan koneksi atau kesimpulan yang menetapkan instance innodb sama dengan jumlah CPU fisik akan menyelesaikan masalah swap. Apakah beberapa instance innodb akan secara otomatis menyeimbangkan antara node memori tanpa menetapkan numactl --interleave = all, membilas cache buffer Linux atau memaksa OS untuk mengalokasikan pool buffer InnoDB?
Wen Ren
@Rando, Ram bagus 2x 100 GB. Klien yang mana?
Pacerier
Saya pikir "instance" diimplementasikan sebagai berikut: (nomor blok) MOD (num instance) -> (yang mana instance untuk meletakkan blok). Itu tidak ada hubungannya dengan NUMA.
Rick James
4

Pertama-tama tingkatkan Ukuran Pool Buffer InnoDB default di my.cnf (saya yakin defaultnya adalah 8MB)

Anda mungkin harus mengatur ini ke 75% dari ukuran RAM Anda (secara umum)

Matt Healy
sumber
-1

Parameter konfigurasi apa yang paling sering Anda ubah dari standarnya?

konfigurasi memori

sbczk
sumber
Bisakah Anda memberikan jawaban yang lebih jelas? Bagaimana dengan mereka yang Anda ubah? Mengapa Anda melakukan perubahan itu? Apa pengamatan Anda setelah perubahan tersebut? Bagaimana Anda tahu untuk mengubahnya?
jcolebrand
di luar kotak konfigurasi mysql disiapkan untuk mengatur tabel myisam dengan cepat (karena sebagian besar pengguna menggunakannya dengan cara itu), selain itu untuk memiliki server yang dioptimalkan dengan baik, Anda harus memilih mesin "primer" untuk digunakan (innodb atau mysql) karena sangat cukup sulit untuk mengkonfigurasi database untuk kinerja yang sangat baik untuk mesin stan, mysql memiliki buffer terpisah untuk mesin myisam dan
innodb