it-swarm.asia

Bagaimana Anda menyetel MySQL untuk beban kerja InnoDB yang berat?

Dengan asumsi produksi OLTP sistem 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?

Setiap anekdot yang merinci variabel dan diagnostik status spesifik akan dihargai.

40
Riedsio

Di Sini 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.

16
Gaius

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 pool 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 satu Buffer Pool + pengaturan 162GB tunggal read_io_threads dan write_io_threads ke 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 Pool Buffer InnoDB monolitik tunggal yang lebih besar dari itu Total Dipasang Dibagi Dengan Jumlah CPU Fisik, Anda akan memicu OS untuk swap memori interval reguler karena Pool Buffer InnoDB penuh. Opsi MySQL 5.5 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 Pool Penyangga klien. Saya telah menetapkan 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 saya 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 server 192GB RAM sebagai 96GB untuk setiap inti fisik. Oleh karena itu, saya mengatur innodb_buffer_pool_instances ke 2. Semuanya terlihat baik sekarang. Saya akan memperbarui jawaban saya untuk melihat bagaimana ini mempengaruhi pertukaran memori untuk 2 bulan berikutnya.

19
RolandoMySQLDBA

Anda mungkin ingin menjelajahi sumber daya berikut:

7

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)

4
Matt Healy