Bagaimana Anda memilih mesin basis data MySQL

16

Secara khusus, bagaimana Anda memilih antara MyISAM dan InnoDB, ketika tidak ada yang kehilangan fitur yang diperlukan (misalnya Anda tidak memerlukan kunci asing).

Apakah selalu turun untuk mencoba keduanya dan mengukur? Atau adakah aturan praktis yang baik tentang jumlah dan frekuensi membaca versus menulis, dan langkah-langkah lain seperti itu? Apakah ukuran meja memiliki efek pada pilihan tipikal?

Tony Meyer
sumber

Jawaban:

6

Jawabannya adalah Anda harus selalu mengukur, lebih baik dengan data dan beban kerja Anda sendiri jika memungkinkan.

Karena pola akses data dapat sangat bervariasi dari satu aplikasi ke aplikasi lainnya, sulit untuk dikatakan dan kemungkinan besar tidak mungkin untuk menentukan mesin penyimpanan "terbaik" untuk semua beban kerja.

Namun, ada perkembangan yang sangat menggembirakan dalam ruang MySQL setelah menghadiri MySQLConf / Percona Performance Conf minggu lalu.

Beberapa mesin penyimpanan alternatif:

  1. XtraDB (garpu InnoDB)
  2. Plugin InnoDB
  3. PBXT
  4. TokuDB

Selain itu, Percona, Google, dll. Telah berkontribusi patch yang sangat membantu dengan kinerja InnoDB. Secara pribadi, saya menjalankan build OurDelta. Ini bekerja dengan baik untuk saya dan saya mendorong memeriksa OurDelta dan Percona builds.

Jauder Ho
sumber
Jika Anda tertarik pada tolok ukur, coba sysbench atau iibench.
Jauder Ho
Apakah ada salah satu mesin penyimpanan alternatif yang cukup stabil sehingga cocok untuk lokasi produksi?
Tony Meyer
Don MacAskill sedang mempertimbangkan untuk menempatkan XtraDB ke dalam produksi. YMMV.
Jauder Ho
Kinerja bukan satu-satunya persyaratan - pertimbangkan masalah operasional juga (pada kenyataannya mereka biasanya lebih penting, dalam pengalaman saya)
MarkR
Jelas, kinerja bukan satu-satunya persyaratan meskipun saya percaya permintaan asli bertanya lebih lanjut tentang perf. Pertimbangan lain seperti operasional (seperti yang Anda tunjukkan) dan fitur semua akan berperan dalam proses pemilihan.
Jauder Ho
5

Jika itu hanya sistem penyimpanan / pelaporan yang sederhana, saya menggunakan MyISAM untuk kinerja awalnya.

Saya akan menggunakan InnoDB jika saya khawatir tentang beberapa akses bersamaan dengan banyak tulisan, untuk mengambil keuntungan dari penguncian tingkat-baris.

Alnitak
sumber
1
Untuk setiap beban kerja yang bercampur membaca dan menulis InnoDB adalah satu-satunya pilihan (yang saat ini dikirimkan).
Dave Cheney
4

Ada sejumlah tolok ukur yang baik di luar sana untuk berbagai mesin basis data MySQL. Ada yang layak membandingkan MyISAM, InnoDB dan Falcon di Blog Kinerja MySQL Percona , lihat di sini .

Hal lain yang perlu dipertimbangkan antara dua mesin tersebut (MyISAM dan InnoDB) adalah pendekatan mereka untuk mengunci. MyISAM melakukan penguncian meja, sementara InnoDB melakukan penguncian baris. Ada berbagai hal yang perlu dipertimbangkan, tidak hanya angka kinerja yang benar-benar.

James B
sumber
4

Ada fitur yang menurut Anda sangat berguna, untuk alasan operasional, bahkan jika aplikasi Anda tidak benar-benar membutuhkannya:

  • InnoDB memiliki MVCC yang berarti Anda dapat mengambil cadangan yang konsisten tanpa pemblokiran
  • InnoDB memiliki pemulihan otomatis yang berarti tidak ada operasi PERBAIKAN TABEL yang lama setelah shutdown yang tidak bersih
  • Dengan InnoDB, pembaca tidak pernah memblokir penulis dan sebaliknya, yang berarti (secara umum) konkurensi yang lebih besar (ini tidak berarti kinerja yang lebih baik dalam kasus umum)
  • InnoDB mengelompokkan barisannya pada kunci utama, yang MUNGKIN berarti lebih sedikit operasi IO untuk operasi baca JIKA kunci primer dipilih dengan cukup baik.

Jadi terlepas dari batasan kunci asing, Anda mungkin ingin tetap menggunakan InnoDB.

tentu saja ini ServerFault, bukan Stack Overflow, jadi jawaban yang tepat adalah:

  • Anda harus selalu menggunakan mesin yang telah dipilih pengembang aplikasi
  • Jika mereka belum memilih mesin tertentu, mereka tidak terlalu serius menggunakan MySQL, dan mungkin tidak tahu cara menggunakannya dengan benar.
  • Anda tidak dapat beralih ke mesin yang berbeda dengan yang diuji aplikasi Anda, itu mungkin memperkenalkan bug.
MarkR
sumber
2
Apakah Anda benar-benar berpikir bahwa mesin basis data adalah keputusan pengembang, bukan administrator? Sebagai seorang pengembang, saya ingin mengatakan "Saya memiliki data ini, bahwa saya akan melakukan ini dengan", dan biarkan mengoptimalkan (dan mencadangkan, dan ...) database ke administrator.
Tony Meyer
1
Ya, pengembang harus dapat mengembangkan dan menguji aplikasi mereka terhadap mesin tertentu; mereka berperilaku sangat berbeda baik secara fungsional maupun kinerja.
MarkR
2

Penyedia hosting saya menyarankan kami untuk menyingkirkan MyISAM sepenuhnya dan beralih ke InnoDB, kecuali itu tidak mungkin.

Dalam kasus kami, kami mengalami kerusakan data yang parah yang mulai terlihat dari beberapa kali hingga beberapa kali per hari, selalu membutuhkan tabel PERBAIKAN dan perintah terkait, yang memakan waktu lama di atas meja besar.

Setelah kami dikonversi (atau: dikonversi) ke InnoDB, masalah langsung hilang. Kerugian / peringatan yang kami miliki:

  • Tidak dapat mengonversi tabel dengan indeks FULLTEXT (masalah ini hilang dengan sendirinya; diganti dengan solusi berbasis Solr / Lucene yang memiliki kualitas jauh lebih baik)
  • Tabel besar dengan jutaan baris yang sering membutuhkan COUNT (*) sangat lambat, kami juga tidak dapat beralih.

Tetapi perhatikan: ini semua khusus untuk lingkungan kita, dll., Jadi itu mungkin tidak berlaku secara umum.

menandai
sumber
Hanya pilih count ( ) dari tabel yang lebih cepat di MyISAM. Pilih count ( ) dari tabel di mana kolom = nilai memiliki kinerja yang sama baik di MyISAM dan InnoDB. mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables
sumar