Multi core dan Kinerja MySQL

38

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 seterusnya.

Apakah mesin penyimpanan yang berbeda menggunakan CPU secara berbeda?

Rick James
sumber
ini terkait tetapi tidak membahas perilaku mesin penyimpanan yang berbeda terhadap CPU multi-core.
Rick James
1
Memang. Itulah sebabnya tidak ada suara "sedekat duplikat" ...
gbn
Ini adalah komunitas yang luar biasa, saya masih belajar bagaimana menggunakan situs ini.
Rick James
Hai sobat lihat di sini: mysql-cluster-blog.com Anda menemukan setidaknya sesuatu

Jawaban:

30

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

Fitur MySQL 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 lainnya 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). Bahkan, Percona menyuntikkan sekitar 30.000 baris kode khusus untuk peningkatan kinerja InnoDB dengan setiap rilis GA baru dari kode sumber MySQL. Kita bisa yakin Oracle telah memasukkan perangkat tambahannya sendiri dari think tank mereka sendiri untuk dijalankan 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 menggunakan 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 . Mengingat perspektif ini, InnoDB akan melibatkan lebih banyak core 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.

Misalnya, innodb_read_io_threads dan innodb_write_io_threads (keduanya sejak MySQL 5.1.38) mengalokasikan jumlah utas yang ditentukan untuk dibaca dan ditulis. Default adalah 4 dan maksimum adalah 64. Pengaturan default dan maks sangat berbeda (4 - 64) menunjukkan bahwa InnoDB adalah multithread dan inti intensif seperti yang Anda konfigurasikan !!!

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.

RolandoMySQLDBA
sumber
InnoDB di bawah MySQL 5.5 disetel seperti yang Anda sarankan di atas dapat mengambil manfaat dari semua core? {agak bingung tentang plugin InnoDB}
Rick James
@ Rick - Selanjutnya ditujukan komentar Anda dalam jawaban saya
RolandoMySQLDBA
Di sini tampaknya menjadi cerita yang sama sekali berbeda dan MyISAM tampaknya gagal ketika menggunakan multi-core tetapi di sisi lain di dba.stackexchange.com/questions/5974/best-of-myisam-and-innodb MyISAM memiliki keuntungan. Jadi, sepertinya itu adalah dasi untuk memutuskan ke mana harus pergi.
Rick James
2
Itu semua tergantung pada tujuan yang Anda miliki dalam menggunakan MyISAM atau InnoDB. Apa dan berapa banyak yang ingin Anda cache? Apakah Anda mengandalkan MySQL atau mekanisme caching lainnya (seperti pernis dan memcached) untuk pengambilan data? Apakah perangkat keras Anda ditingkatkan untuk InnoDB dengan benar? Apakah 98% SQL SELECT Anda? Apakah tabel dalam format terbaik untuk bacaan berkecepatan tinggi? Menjawab pertanyaan-pertanyaan ini sebelumnya harus memandu kita mengenai pemilihan mesin penyimpanan, konfigurasi yang sesuai, pemilihan perangkat keras, bahkan mencapai hal-hal yang lebih dalam seperti ketersediaan tinggi, topologi DB, pemisahan membaca / menulis, dan daftar ini dapat berlanjut.
RolandoMySQLDBA
9

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

Masalah khusus yang membatasi penskalaan cpu adalah ketika kode penguncian internal ( mutex ) memiliki pertikaian dan memblokir utas dari menjalankan 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.

Morgan Tocker
sumber
5
+1 untuk menyebut gajah di dalam ruangan: pertikaian mutex
cerd