it-swarm.asia

Multi core dan Kinerja MySQL

Pentingnya RAM adalah fakta mapan tetapi jauh lebih sedikit materi yang tersedia tentang pentingnya core dan multithreading ketika datang ke penggunaan CPU oleh MySQL. Saya berbicara tentang perbedaan menjalankan MySQL pada 4cores vs 6cores vs 8cores dan sebagainya.

Apakah mesin penyimpanan yang berbeda menggunakan CPU secara berbeda?

38
Rick James

Ketika datang ke MySQL, tidak ada perbandingan antara mesin penyimpanan kecuali bahwa ia jatuh ke dalam dua kategori dasar:

MySQL fitur penggunaan beberapa mesin penyimpanan

Adapun mesin penyimpanan yang terdaftar, satu-satunya yang memiliki kepatuhan ACID adalah InnoDB dan NDB. Mengapa ini tidak perlu disebutkan? Dua alasan:

  • Mesin penyimpanan lain sama sekali tidak diuntungkan dengan kehadiran lebih banyak core, selain dari disk I/O dasar, penggunaan CPU, dan keseluruhan throughput.
  • Kode untuk setiap mesin penyimpanan non-transaksional, yang pada dasarnya menentukan 14 operasi internal terlepas dari mesin penyimpanan, tidak dirancang untuk meningkatkan pengaksesan beberapa inti.

InnoDB di bawah MySQL 5.5, InnoDB Plugin), dan XtraDB Percona Server memiliki opsi yang dapat Anda atur untuk mengakses beberapa core (Percona Server telah melakukannya lebih lama). Faktanya, Percona menyuntikkan sekitar 30.000 baris kode khusus untuk peningkatan kinerja InnoDB dengan setiap rilis baru GA kode sumber MySQL. Kita bisa yakin Oracle telah memasukkan peningkatan sendiri dari think tank mereka sendiri. untuk menjalankan dalam InnoDB untuk operasi multicore (sejak MySQL 5.1.38).

Dengan kebutuhan untuk melakukan MVCC pada data bersamaan dengan penguncian baris/halaman, kinerja transaksi sekarang dapat diinstrumentasi, diukur, dan dikonfigurasikan.

Jika ada satu hal yang saya pelajari tentang penggunaan beberapa core, itu adalah Anda harus menyetel InnoDB secara efektif dan tidak hanya mengandalkan InnoDB di luar kotak .

UPDATE 2011-09-20 08:03 EDT

Berkenaan dengan InnoDB yang diuntungkan dari semua core, kita perlu menjaga segala sesuatunya dalam perspektif. Core juga harus cenderung ke hal-hal lain (OS, Disk, Memori, Aplikasi, Pemantauan, dll) di Server Database. Bagi mereka dengan anggaran sederhana, banyak yang cenderung memiliki Database Server juga menyediakan NFS, pemantauan dari Munin, dukungan aplikasi untuk JBoss, PHP, dan daftar berjalan. Jika Anda ingin MySQL, lebih khusus InnoDB, untuk menggunakan lebih banyak core, Server Database harus didedikasikan khusus untuk MySQL dan OS/Disk/Memory harus cenderung hanya untuk MySQL . Dengan perspektif ini, InnoDB akan melibatkan lebih banyak inti tanpa keraguan.

Adapun Plugin InnoDB, itu disebutkan hanya untuk menunjukkan inisiatif sebelumnya untuk memiliki InnoDB yang lebih baik pada bagian dari MySQL (eh, Oracle. Maaf, masih belum bergeming). Variabel baru untuk memanggil lebih banyak aktivitas inti menjadi jelas dari MySQL 5.1.38.

Sebagai contoh, innodb_read_io_threads dan innodb_write_io_threads (keduanya sejak MySQL 5.1.38) mengalokasikan jumlah utas yang ditentukan untuk membaca dan menulis. Default adalah 4 dan maksimum adalah 64. Pengaturan default dan maks menjadi sangat berbeda (4 - 64) menunjukkan bahwa InnoDB adalah multithread dan inti intensif saat Anda mengkonfigurasinya !!!

Mengatasi kebutuhan komunitas MySQL untuk mengakses lebih banyak core dengan InnoDB dipimpin oleh Percona. Akibatnya, MySQL mulai mengikutinya. Saya harus mengakui bahwa Oracle (yuck) melakukan perbaikan yang diperlukan untuk aktivitas inti yang lebih banyak.

30
RolandoMySQLDBA

Saya menemukan berbicara tentang mesin penyimpanan menggunakan core dapat menyesatkan untuk pemula. Asalkan sebuah program cukup multi-threaded, sistem operasi akan menjadwalkannya sebanyak mungkin core.

Masalah khusus yang membatasi penskalaan cpu adalah ketika kode penguncian internal ( mutex ) memiliki pertentangan dan memblokir utas agar tidak berjalan secara bersamaan. Semua mesin penyimpanan akan membutuhkan mutex, tetapi tentu saja ada beberapa yang panas di MyISAM.

Jika kami mengabaikan pertikaian mutex sebentar dan kembali ke pertanyaan utama Anda: seberapa pentingkah memiliki banyak core? -

Saya suka memiliki banyak core untuk beban kerja yang melayani permintaan yang dihadapi pengguna. Memiliki banyak dapat mengurangi perbedaan antara waktu permintaan. Anggap ini seperti antre di pasar super dengan 12 gang terbuka versus hanya 2.

Pembaruan : Saya menulis posting blog tentang mengapa skalabilitas vertikal (multi-core) penting.

9
Morgan Tocker