Apa filesystem Linux terbaik untuk MySQL (InnoDB)?

48

Saya mencoba mencari patokan pada kinerja berbagai filesystem dengan MySQL InnoDB tetapi tidak dapat menemukannya.

Beban kerja basis data saya adalah OLTP berbasis web yang khas, sekitar 90% baca, 10% tulis. IO acak.

Di antara sistem file populer seperti ext3, ext4, xfs, jfs, Reiserfs, Reiser4, dll. Mana yang menurut Anda merupakan yang terbaik untuk MySQL?

Kelanjutan
sumber

Jawaban:

44

Berapa nilai Anda terhadap data?

Serius, setiap sistem file memiliki pengorbanannya sendiri. Sebelum saya melangkah lebih jauh, saya penggemar berat XFS dan Reiser, meskipun saya sering menjalankan Ext3. Jadi tidak ada bias filesystem nyata yang bekerja di sini, hanya memberi tahu Anda ...

Jika sistem file sedikit lebih dari sekadar wadah untuk Anda, maka lakukan apa saja yang memberi Anda waktu akses terbaik.

Jika datanya bernilai signifikan, Anda harus menghindari XFS. Mengapa? Karena jika itu tidak dapat memulihkan sebagian dari file yang dijurnal itu akan nol blok dan membuat data tidak dapat dipulihkan. Masalah ini diperbaiki di Linux Kernel 2.6.22 .

ReiserFS adalah sistem file yang hebat, asalkan tidak pernah crash keras . Pemulihan jurnal berfungsi dengan baik, tetapi jika karena alasan tertentu Anda kehilangan info partisi Anda, atau blok inti dari sistem file terhapus, Anda mungkin memiliki pertanyaan jika ada beberapa partisi ReiserFS pada disk - karena mekanisme pemulihan pada dasarnya memindai seluruh disk, sektor demi sektor, mencari apa yang "dipikirkan" adalah awal dari sistem file . Jika Anda memiliki tiga partisi dengan ReiserFS tetapi hanya satu yang ditiup, Anda dapat membayangkan kekacauan ini akan menyebabkan proses pemulihan menjahit kekacauan Frankenstein dari dua sistem lainnya ...

Ext3 "lambat", dalam "Saya punya 32.000 file dan butuh waktu untuk menemukan semuanya berjalan ls" dengan cara agak. Jika Anda akan memiliki ribuan meja sementara kecil di mana-mana, Anda akan memiliki sedikit kesedihan. Versi yang lebih baru sekarang menyertakan opsi indeks yang secara dramatis mengurangi traversal direktori tetapi masih bisa menyakitkan.

Saya tidak pernah menggunakan JFS. Saya hanya dapat berkomentar bahwa setiap ulasannya yang pernah saya baca adalah sesuatu yang "solid, tetapi bukan anak tercepat di blok". Mungkin pantas diselidiki.

Cukup Kontra, mari kita lihat Pro:

XFS:

  • Jeritan dengan file besar, waktu pemulihan cepat
  • pencarian direktori sangat cepat
  • Primitif untuk membekukan dan menghapuskan sistem file untuk dumping

ReiserFS:

  • Akses file kecil yang sangat optimal
  • Paket beberapa file kecil ke dalam blok yang sama, menghemat ruang sistem file
  • pemulihan cepat, saingan kali pemulihan XFS

Ext3:

  • Sudah dicoba dan benar, berdasarkan kode Ext2 yang sudah teruji
  • Banyak alat untuk bekerja dengannya
  • Dapat dipasang kembali sebagai Ext2 dalam keadaan darurat untuk pemulihan
  • Dapat menyusut dan diperluas (sistem file lain hanya dapat diperluas)
  • Versi terbaru dapat diperluas "langsung" (jika Anda berani)

Jadi Anda lihat, masing-masing memiliki kebiasaan sendiri. Pertanyaannya adalah, mana yang paling tidak aneh untuk Anda?

Avery Payne
sumber
29
Masalah file XFS NULLed telah diperbaiki lebih dari 3 tahun yang lalu. xfs.org/index.php/…
Ryan Bair
5
Walaupun benar bahwa saya tidak memiliki semua waktu di dunia untuk mengikuti perubahan pengembangan kernel (di atas pekerjaan dan keluarga), juga benar bahwa ada penyebaran lama yang berderit di luar sana yang perlu diperbarui. Namun, saya akan memasukkan +1 untuk menunjukkan perbaikan yang dilakukan.
Avery Payne
13

Mungkin juga patut dicatat bahwa Anda dapat menjalankan InnoDB tanpa filesystem dan meningkatkan kinerja tanpa overhead filesystem. Saya tidak yakin saya akan merekomendasikannya, tetapi saya telah menggunakannya sebelumnya tanpa masalah.

Perangkat Baku InnoDB

Selain itu, jika Anda menjalankan 90% membaca dan 10% menulis, kecuali jika Anda memerlukan kemampuan transaksional InnoDB Anda mungkin melihat porting ke MyISAM untuk kinerja membaca yang lebih baik.

Xorlev
sumber
6
-1 untuk menyarankan pindah ke MyISAM untuk kinerja membaca yang lebih baik. Memiliki banyak kekurangan dan kelemahan lainnya. InnoDB harus dikonfigurasi dengan benar sebagai gantinya. +1 untuk saran InnoDB-on-raw-device.
gertvdijk
5
Saya mendukung pernyataan saya, MyISAM memiliki kekurangan tetapi ada banyak hal baik yang bisa didapat. MyISAM masih bos untuk membaca beban kerja.
Xorlev
11

Jawaban di sini benar-benar usang, dan perlu diperbarui karena ini akan muncul di hasil google.

Untuk lingkungan produksi, XFS. Setiap saat. XFS dijurnal dan tidak diblokir. Pastikan Anda memiliki variabel berikut untuk database MySQL modern (2011/2012) menggunakan InnoDB dalam produksi:

innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1 # an ACID requirement
sync_binlog = 1 # more ACID
innodb_flush_method = O_DIRECT

Jangan gunakan EXT3 atau bahkan EXT4. Suatu hari BTRFS akan sampai di sana.

EXT3, dan mungkin EXT4, mengunci pada level inode, tidak pintar!

Sumber: - www.mysqlperformanceblog.com - http://dev.mysql.com/doc/internals/en/index.html - Memahami MySQL Internal oleh Sasha Pachev - https://www.facebook.com/note.php? note_id = 10150210901610933 - http://oss.sgi.com/projects/xfs/training/ - Beberapa swing kit, coba-coba.

EDIT: Pembaruan. EXT4 tampaknya berjalan cukup baik pada pertengahan 2013! BTRFS masih bukan pilihan yang baik. Dan RHEL mungkin menjadikan XFS sistem file default baru. Sekali lagi, jangan gunakan EXT3.

Mathnode
sumber
Menurut tes Vadim Tkachenko , EXT4 menyediakan 20% throughput lebih dari XFS jika MySQL 5.5 dengan InnoDB digunakan. Vadim menyarankan untuk menggunakan opsi EXT4 'dioread_nolock' di mana tersedia (meskipun ia tidak menggunakannya dengan tes).
caligari
Mengapa mengunci pada level inode buruk?
jpaugh
jawaban lainnya sudah usang ... sekarang ,: 5 tahun kemudian ...
kaiser
Google "pertentangan kunci inode" untuk masalah dengan penguncian inode.
mencolok
9

Versi singkatnya adalah bahwa yang paling dekat dengan rekomendasi yang pernah saya lihat di MySQL tentang filesystem adalah XFS, namun ext3 juga harus ok, ext4 menjanjikan perbaikan yang bagus, tetapi masih belum cukup stabil, meskipun harus sebelum akhir tahun.

Jika Anda menjalankan filesystem cluster CXFS, OCFS2 dan GFS semua harus ok.

Saya akan sangat memperingatkan terhadap setiap derivatif Reiser, dan JFS meskipun sekali bagus sebagian besar telah dikalahkan oleh XFS dan ext4 yang keduanya lebih banyak digunakan.

LapTop006
sumber
6

Itu tidak akan membuat banyak perbedaan. Pergilah dengan apa pun distribusi Anda gunakan sebagai default, asalkan cukup.

Habiskan usaha Anda untuk memperbaiki hal-hal lain - dapatkan ram yang cukup - dapatkan pengontrol serangan yang tidak menyedot - dan perbaiki aplikasi (ab) penggunaan database (NB: ini adalah penyebab utama dalam banyak kasus di mana ia belum melakukannya telah dilakukan).

Namun pertimbangkan, dengan hati-hati, sistem file tempat Anda meletakkan tmpdir mysql Anda; ini akan memengaruhi kinerja, khususnya kueri yang melakukan filesort () berbasis disk (lihat EXPLAIN untuk detail lebih lanjut).

Saya pikir sistem file yang mendukung alokasi tertunda sangat berguna di sini, karena Anda dapat menghindari IO sepenuhnya untuk file berumur pendek ketika ada cukup ram untuk menyimpannya dalam cache. XFS, misalnya, tidak repot-repot menulis file sama sekali yang bisa dihapus dan ditutup sebelum dialokasikan.

Tentu saja menempatkan tmpdir pada tmpfs menarik dari perspektif kinerja, tetapi mengarah pada risiko melelahkan ruang dan memiliki pertanyaan yang jika tidak akan berhasil (walaupun dengan file sementara disk yang digunakan) gagal.

MarkR
sumber
5

Saya tidak menemukan artikel terbaru dengan benchmark "roundups" di MySQL yang berjalan di berbagai filesystem. Mengingat beban kerja yang Anda jelaskan, saya ragu bahwa fragmentasi tingkat file akan menjadi masalah besar. Tanpa tolok ukur formal, saya tidak bisa mengatakan apa pun yang harus Anda ambil sebagai otoritatif, tetapi nyali saya mengatakan bahwa setiap sistem file yang Anda sebutkan di atas akan melakukan kira-kira di ballpark yang sama (yaitu semua dalam urutan yang sama besarnya untuk angka kinerja) .

Basis data benar-benar menjalankan pertunjukan, karena sistem file hanya mengelola luasan besar yang diakses oleh mesin penyimpanan.

Namun, akan menarik untuk melakukan pembulatan kinerja dengan semua sistem file tersebut. (Namun, saya kurang antusias terhadap MySQL, jadi saya tidak akan melakukannya. Benchmarking Postgres, OTOH, mungkin menarik ...)

Evan Anderson
sumber
1
Engkau juga merupakan stackoverflow.com/questions/1021854/... duplikat dengan beberapa referensi yang mungkin menarik bagi Anda
nik
3

IMHO, FS yang patut diperhatikan yang tersedia untuk linux adalah:

XFS (kecepatan baca buruk) dikenal ringan pada sumber daya sistem dan cepat dengan file besar tetapi buruk untuk menangani banyak file kecil.

ReiserFS (kecepatan tulis yang buruk) tidak terlalu baik pada sumber daya sistem tetapi berkinerja sangat baik dengan banyak file kecil.

EXT3 berada di antaranya, berkinerja dapat diterima di semua bidang (alasan mengapa ini dianggap sebagai linux FS default ).

Saya belum menggunakan EXT4 bukan ReiserFS4 sendiri tetapi saya telah melihat-lihat beberapa tolok ukur dan ReiserFS tampaknya memiliki kinerja terbaik dalam hal kecepatan membaca, yang menurut Anda paling penting bagi Anda.

Lihatlah ini: ReserFS4 X Ext4 X Ext3

Saya akan merekomendasikan Ext3 untuk stabilitas, keamanan, dan kematangannya, tetapi jika kecepatan baca adalah yang paling penting bagi Anda, Anda harus mempertimbangkan ReiserFS.

Ingatlah bahwa Anda juga harus mempertimbangkan penggunaan CPU, stabilitas, keamanan, dan seterusnya sebelum memilih FS.

Dan tentu saja membuat pilot, pengujian dan benchmarking pada lingkungan khusus Anda selalu merupakan cara terbaik untuk mengetahui apa yang terbaik untuk Anda.

PS: Saya akan mengirim lebih banyak tolok ukur tetapi saya tidak dapat mengirim lebih dari satu tautan.

OldJim
sumber