Apa filesystem terbaik untuk menyisipkan kinerja pada PostgreSQL?

20

Saya ingin tahu apakah ada orang di luar sana yang telah melakukan percobaan atau perbandingan antara sistem file dan kinerja database. Di Linux, saya bertanya-tanya apa sistem file yang optimal untuk database postgres. Juga, pengaturan apa (inode, dll) yang ideal untuk itu? Apakah ini sesuatu yang mungkin berbeda secara drastis berdasarkan data dalam database?

Jika Anda mencari pertanyaan yang berkaitan dengan kinerja sistem file / database umum, posting ini memiliki beberapa informasi yang baik.

Namun, saya ingin mendapatkan saran sebanyak-banyaknya tentang kinerja penyisipan yang bertentangan dengan kinerja membaca sebanyak mungkin. Terima kasih atas semua jawaban hebatnya!

Elia
sumber
7
Sistem file terbaik akan lebih banyak memori? ;)
Oskar Duveborn
2
+1 untuk Oskar. Kami baru saja beralih dari konfigurasi server di mana RAM ~ 33% dari total ukuran DB ke mesin baru di mana total RAM lebih besar dari ukuran DB. Sekarang kita bisa men-cache seluruh DB di memori. Permintaan SQL kami yang paling lambat sekarang 2 urutan lebih cepat.
KevinRae

Jawaban:

14

Beli salinan "postgresql high performance" oleh Greg Smith. Ini adalah Buku yang bagus dan dua bab atau lebih tentang Disk Hardware dan sistem file. Anda akan belajar banyak.

Singkatnya: tidak ada jawaban singkat.

Tetapi saya akan mencoba membuat musim:

  • jangan gunakan ext2 sampai Anda tahu apa yang Anda lakukan.
  • dengan ext3 waspadalah terhadap lonjakan pos pemeriksaan karena panggilan fsync, lihat halaman 113 dan 82 dan 79
  • gunakan ext4 atau xfs
  • ada opsi lain

Tetapi ketika Anda benar-benar bertanya pada diri sendiri apa yang akan digunakan FS, Anda harus membaca buku itu!

Janning
sumber
4
Setuju, ini adalah jenis topik yang dibahas Greg dengan sangat baik. Ada bab contoh di packtpub.com/sites/default/files/… jika Anda ingin melakukan evaulasi sebelum meminjam atau membeli buku.
sciurus
1
Lucu, ketika saya mengalami masalah ini, buku itu tidak ada. Sekarang, saya benar-benar bersyukur atas upaya yang dimasukkan Greg ke buku itu.
Elia
Saya membeli salinan lain hanya untuk menghormati karya luar biasa ini :-)
Janning
6

Pertama-tama, Anda menginginkan sistem file yang andal terlebih dahulu, dan cepat satu detik. Yang mengesampingkan beberapa opsi ...

Pengujian kinerja menunjukkan bahwa seringkali XFS memberikan kinerja terbaik. Ada beberapa masalah stabilitas dengan itu setelah Anda mencapai disk-sangat-dekat-ke-skenario penuh, tetapi selama Anda memantau itu tidak terjadi, itu akan memberi Anda kinerja yang sedikit lebih baik.

Secara teori Anda tidak perlu filesystem penjurnalan untuk direktori pg_xlog, tetapi perbedaan dalam kecepatan biasanya sangat kecil sehingga tidak layak. Untuk direktori data, Anda harus selalu memiliki sistem file penjurnalan metadata.

Magnus Hagander
sumber
4
Anda mungkin ingin / tidak / menggunakan XFS untuk menyimpan database, yaitu karena itu akan (bila diperlukan) nol blok yang tidak dapat dipulihkan.
Avery Payne
4

Sistem manajemen basis data mengimplementasikan penjurnalan mereka sendiri melalui log basis data, jadi memasang DBMS pada sistem file penjurnalan menurunkan kinerja melalui dua mekanisme:

  1. Penjurnalan berlebihan meningkatkan jumlah aktivitas disk

  2. Tata letak disk fisik dapat terfragmentasi (meskipun beberapa sistem file penjurnalan memiliki mekanisme untuk membersihkannya).

  3. Banyak aktivitas disk dapat mengisi jurnal, menyebabkan kondisi 'disk penuh' palsu.

Saya telah melihat contoh beberapa tahun yang lalu di mana ini dilakukan pada sistem file LFS pada instalasi Baan pada kotak HP / UX. Sistem memiliki masalah kinerja dan korupsi data yang terus-menerus yang tidak terdiagnosis hingga seseorang mengetahui bahwa sistem file diformat dengan LFS.

Volume memegang file database biasanya akan memiliki sejumlah kecil file besar. Server DBMS biasanya memiliki pengaturan yang mengkonfigurasi berapa banyak blok yang dibaca dalam satu I / O. Angka yang lebih kecil akan sesuai untuk sistem pemrosesan transaksi volume tinggi karena mereka akan meminimalkan caching data yang berlebihan. Angka yang lebih besar akan sesuai untuk sistem seperti gudang data yang melakukan banyak pembacaan sekuensial. Jika memungkinkan, sesuaikan ukuran blok alokasi sistem file Anda dengan ukuran yang sama dengan multi-blok yang dibaca untuk DBMS.

Beberapa sistem manajemen basis data dapat mematikan partisi disk mentah. Ini memberikan berbagai tingkat peningkatan kinerja, biasanya lebih sedikit pada sistem modern dengan banyak memori. Pada sistem yang lebih lama dengan metadata file system cache yang lebih sedikit, penghematan pada disk I / O cukup signifikan. Partisi mentah membuat sistem lebih sulit untuk dikelola, tetapi memberikan kinerja terbaik yang tersedia.

Volume RAID-5 mengeluarkan lebih banyak overhead penulisan daripada volume RAID-10, sehingga basis data yang sibuk dengan banyak traffic tulis akan berkinerja lebih baik (seringkali jauh lebih baik) pada RAID-10. Log harus diletakkan volume disk yang terpisah secara fisik ke data. Jika basis data Anda besar dan kebanyakan hanya baca (mis. Gudang data) mungkin ada kasus untuk meletakkannya di volume RAID-5 jika ini tidak terlalu memperlambat proses pemuatan.

Caching balasan pada pengontrol dapat memberi Anda kemenangan kinerja dengan mengorbankan menciptakan beberapa mode kegagalan (yang kemungkinan tidak mungkin terjadi) di mana data dapat rusak. Kemenangan kinerja terbesar untuk ini adalah pada beban akses yang sangat acak. Jika Anda ingin melakukan ini, pertimbangkan untuk meletakkan log pada pengontrol terpisah dan menonaktifkan caching balasan pada volume log. Log kemudian akan memiliki integritas data yang lebih baik dan kegagalan tunggal tidak dapat mengeluarkan volume log dan data. Ini memungkinkan Anda untuk memulihkan dari cadangan dan memutar maju dari log.

ConcernedOfTunbridgeWells
sumber
Data jurnal menurunkan kinerja; metadata jurnal seharusnya memiliki dampak minimal yang terburuk, dan kemungkinan besar, hampir tidak ada. Tidak penjurnalan metadata tidak disarankan.
niXar
Saya pikir Anda salah paham artikel itu. Sistem file apa pun memiliki metadata sistem file dan lalu lintas disk apa pun akan melibatkan membaca atau menulis ini. Komputer modern biasanya memiliki cukup RAM untuk dengan mudah melakukan cache metadata sistem file ini tetapi mesin yang lebih tua tidak. Ini berarti bahwa akses disk mengeluarkan overhead I / O tambahan yang signifikan (angka yang sering dikutip untuk Oracle adalah kinerja 30% hit pada partisi mentah) untuk membaca atau memperbarui metadata sistem file. Pada sistem modern dengan lebih banyak RAM, metadata sistem file lebih cenderung di-cache, sehingga biaya overhead lebih rendah.
ConcernedOfTunbridgeWells
Ini berisi beberapa saran umum yang baik, tetapi saya tidak memilih karena juga berisi informasi yang tidak relevan atau salah untuk sistem file postgresql dan journaled modern.
sciurus
3

Saya melakukan laporan terperinci tetapi hanya dalam bahasa Prancis . Jika Anda membaca bahasa Prancis atau senang dengan alat terjemahan otomatis ... Anda dapat menggunakan kembali metodologi dan menjalankannya sendiri.

Ringkasan eksekutif: Saya menggunakan pgbench. Penjadwal I / O Linux memiliki arti yang sangat kecil untuk kinerja dan sistem file hanya sedikit. Jadi, jika Anda sedang terburu-buru, cukup pilih default. Saya memilih JFS.

bortzmeyer
sumber
2

Filesystem hanya bagian dari masalah. Anda bisa mendapatkan peningkatan kinerja yang signifikan dengan mengubah penjadwal IO Anda. Untungnya ini cukup mudah untuk diuji karena Anda dapat mengubah penjadwal IO dengan cepat. Saya sarankan mencoba masing-masing selama beberapa hari di bawah beban umum dan melihat mana yang memberikan kinerja terbaik.

David Pashley
sumber
Tolok ukur saya menunjukkan sedikit perubahan ketika mengubah penjadwal I / O, mungkin karena setiap DBMS sudah memiliki penjadwal sendiri.
bortzmeyer
MySQL berupaya jauh lebih baik di bawah beban tinggi dari menggunakan penjadwal tenggat waktu.
David Pashley
2

Saya melakukan beberapa pengujian beberapa bulan lalu:

Saya punya program pengujian kecil yang membuat 50 utas, di mana setiap utas memasukkan 1000 (atau jika itu 10.000) baris ke tabel yang sama.

  • Dengan database pada EXT3 dan RAID5 4 disk, butuh 50 detik.
  • Dengan tabel di ramdisk (menggunakan tablespace) masih butuh 50 detik. Alasannya tidak lebih cepat adalah bahwa semuanya masuk dalam direktori pg_xlog yang mana masih pada RAID 5 yang sama.
  • Saya memindahkan pg_xlog ke RAID0 4 disk (stripe) dan program yang sama berjalan dalam 40 detik.
  • Untuk tujuan pengujian saya memindahkan pg_xlog ke ramdisk dan memiliki semua yang lain pada disk RAID EXT3 4. Program selesai setelah kurang dari 5 detik.

Tetapi memiliki pg___xlog pada perangkat lunak ramdisk bukanlah suatu pilihan: Jika Anda kehilangan isi direktori pg_xlog postgres tidak akan mulai. (Tapi ada ramdisk perangkat keras dengan cadangan baterai yang mungkin menarik.)

IMHO: Gunakan file files yang Anda paling nyaman dengan untuk file database. Pindahkan pg_xlog (dengan symlink, lihat dokumentasi) ke perangkat tercepat yang Anda miliki.

beberapa
sumber
1
pgbench melakukan sesuatu yang serupa dan disertakan dengan sebagian besar pemasangan.
Avery Payne
0

Saya telah mengingat bahwa FreeBSD tweak akan memberi Anda sedikit lebih banyak kinerja dibandingkan dengan OS lain. Meskipun saya yakin bahwa info ini sudah ketinggalan zaman dan mungkin mitos di tempat pertama. Tetapi Anda dapat mencobanya, lihat pedoman ini untuk pengaturan kernel: http://developer.postgresql.org/pgdocs/postgres/kernel-resources.html

Martin P. Hellwig
sumber