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!
Jawaban:
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:
Tetapi ketika Anda benar-benar bertanya pada diri sendiri apa yang akan digunakan FS, Anda harus membaca buku itu!
sumber
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.
sumber
Sistem manajemen basis data mengimplementasikan penjurnalan mereka sendiri melalui log basis data, jadi memasang DBMS pada sistem file penjurnalan menurunkan kinerja melalui dua mekanisme:
Penjurnalan berlebihan meningkatkan jumlah aktivitas disk
Tata letak disk fisik dapat terfragmentasi (meskipun beberapa sistem file penjurnalan memiliki mekanisme untuk membersihkannya).
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.
sumber
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.
sumber
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.
sumber
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.
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.
sumber
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
sumber