Kami telah menjalankan server pada VM di perusahaan hosting, dan baru saja mendaftar untuk host yang berdedikasi (AMD Opteron 3250, 4 core, 8GB RAM, 2 x 1TB dalam perangkat lunak RAID, ext3).
Saat menjalankan tes kinerja, kami perhatikan bahwa beberapa transisi SQLite (kombinasi sisipan, penghapusan dan / atau pembaruan) membutuhkan waktu 10x hingga 15x lebih lama daripada pada MacBook Pro 2010 saya.
Setelah banyak googling dan membaca, kami harus melihat opsi pemasangan, yaitu:
data=ordered,barrier=1
Kami telah melakukan beberapa percobaan, dan mendapatkan kinerja terbaik
data=writeback,barrier=0
Saya sudah membaca ini, dan memahami dasar-dasar apa yang mereka lakukan, tetapi saya tidak memiliki perasaan / perasaan yang baik untuk apakah itu ide yang baik untuk kita jalankan seperti ini?
Pertanyaan
Apakah konfigurasi di atas bahkan masuk akal untuk dipertimbangkan untuk layanan yang dihosting?
Jika kami mengalami pemadaman listrik, atau kerusakan parah, maka kami mungkin berakhir dengan data yang hilang, atau file rusak. Jika kami mengambil snapshot dari DB setiap 15 menit, itu mungkin mengurangi situasi, tetapi DB mungkin tidak disinkronkan ketika snapshot diambil. Bagaimana seharusnya (dapat?) Kita memastikan integritas snapshot seperti itu?
Apakah ada opsi lain yang harus kita pertimbangkan?
Terima kasih
Jawaban:
Saran pertama
Jika Anda tidak mampu kehilangan data apa pun (maksud saya setelah pengguna memasukkan data baru, jika itu tidak dapat hilang dalam beberapa detik mendatang) dan karena Anda tidak memiliki sesuatu seperti UPS, maka saya tidak akan menghapus penghalang penulisan, saya juga tidak akan beralih ke writeback.
Menghapus penghalang tulis
Jika Anda menghapus penghalang tulis, maka dalam kasus crash atau kehilangan daya, sistem file perlu melakukan fsck untuk memperbaiki struktur disk (perhatikan bahwa bahkan dengan penghalang AKTIF, kebanyakan sistem file penjurnalan akan tetap melakukan fsck bahkan meskipun replay jurnal seharusnya sudah cukup). Saat menghapus penghalang tulis, disarankan untuk menghapus semua cache disk (di perangkat keras) jika memungkinkan, ini membantu meminimalkan risiko. Anda harus membandingkan dampak dari perubahan tersebut. Anda dapat mencoba perintah ini (jika perangkat keras Anda mendukungnya)
hdparm -W0 /dev/<your HDD>
.Perhatikan bahwa ext3 menggunakan 2 hambatan untuk perubahan metadata, sedangkan ext4 hanya menggunakan satu hambatan saat menggunakan opsi mount
journal_async_commit
.Meskipun Ted T'so menjelaskan mengapa beberapa data korupsi terjadi pada hari-hari awal ext3 (hambatan dinonaktifkan secara default hingga Kernel 3.1 ), jurnal ditempatkan dengan cara yang kecuali terjadi pembungkus log jurnal (jurnal adalah log siklik) data akan ditulis ke disk dalam urutan yang aman - jurnal pertama, data kedua - bahkan dengan hard disk mendukung penataan ulang penulisan.
Pada dasarnya, akan sial bahwa sistem crash atau kehilangan daya terjadi ketika jurnal log wrap. Namun, Anda harus tetap menggunakannya
data=ordered
. Coba patok dengandata=ordered,barrier=0
tambahan.Jika Anda mampu kehilangan beberapa detik data, Anda bisa mengaktifkan kedua opsi
data=writeback,barrier=0
tetapi kemudian mencoba bereksperimen dengancommit=<nrsec>
parameter juga. Periksa manual untuk parameter ini di sini . Pada dasarnya Anda memberikan sejumlah detik yang merupakan periode sistem file ext3 akan menyinkronkan data dan metadata-nya.Anda dapat mencoba juga bermain-main dan melakukan benchmark dengan beberapa kernel kernel mengenai halaman-halaman kotor (mereka yang perlu menulis ke disk), ada artikel bagus di sini yang menjelaskan segalanya tentang merdu ini dan cara bermain dengannya.
Ringkasan tentang hambatan
Anda harus membuat tolok ukur beberapa kombinasi merdu yang lain:
data=writeback,barrier=0
bersama denganhdparm -W0 /dev/<your HDD>
data=ordered,barrier=0
data=writeback,barrier=0
bersama dengan opsi mount laincommit=<nrsec>
dan coba nilai yang berbeda untuk nrsecdata=ordered,barrier=1
, tetapi cobalah merdu lainnya: terutama elevator sistem file (CFQ, Tenggat atau Noop) dan merdu masing-masing.Mempertimbangkan pindah ke ext4 dan melakukan benchmarking
Seperti yang dikatakan ext4 membutuhkan lebih sedikit penghalang daripada ext3 untuk menulis. Selain itu, ext4 mendukung ekstensi yang untuk file besar mungkin membawa kinerja yang lebih baik. Jadi ini adalah solusi yang perlu ditelusuri, terutama karena mudah untuk bermigrasi dari ext3 ke ext4 tanpa menginstal ulang: dokumentasi resmi ; Saya melakukan itu pada satu sistem tetapi menggunakan panduan Debian ini . Ext4 benar-benar stabil sejak kernel 2.6.32 sehingga aman untuk digunakan dalam produksi.
Pertimbangan terakhir
Jawaban ini jauh dari lengkap, tetapi memberi Anda cukup bahan untuk mulai menyelidiki. Ini sangat tergantung pada persyaratan (pada tingkat pengguna atau sistem) sehingga sulit untuk memiliki jawaban langsung, maaf tentang itu.
sumber
ext3
di dalamnya. Mungkin memberikan penjelasan yang lebih mudah dimengerti (atau disederhanakan) tentang apa yang saya coba sampaikan dalam jawaban saya. 2. sqlite.1065341.n5.nabble.com/... Anda dapat mencoba menjaga default ext3 aman (dipesan + penghalang) tetapi menghapus sinkronisasi dalam SQLite. Saya akan segera memperbarui jawaban saya mengenai aspek kedua ini.Peringatan: mungkin ada ketidakakuratan di bawah ini. Saya telah belajar tentang banyak hal ini saat saya berjalan, jadi bawa dengan sedikit garam. Ini cukup panjang, tetapi Anda bisa membaca parameter yang kami mainkan, lalu lewati ke Kesimpulan di bagian akhir.
Ada beberapa lapisan di mana Anda bisa khawatir tentang kinerja penulisan SQLite:
Kami melihat yang disorot dalam huruf tebal. Parameter tertentu adalah
Baca lebih lanjut tentang opsi ext3 dalam dokumentasi ext3 .
Saya menjalankan tes kinerja pada sejumlah kombinasi parameter ini. ID adalah nomor skenario, sebagaimana dimaksud di bawah ini.
Saya mulai dengan menjalankan konfigurasi default pada mesin saya sebagai skenario 1. Skenario 2 adalah apa yang saya anggap sebagai "paling aman", dan kemudian mencoba berbagai kombinasi, jika perlu / diminta. Ini mungkin yang paling mudah dipahami dengan peta yang saya gunakan:
Saya menulis skrip pengujian yang menjalankan banyak transaksi, dengan menyisipkan, memperbarui, dan menghapus, semua di atas meja dengan hanya INTEGER, TEXT saja (dengan kolom id), atau dicampur. Saya menjalankan ini beberapa kali pada masing-masing konfigurasi di atas:
Dua skenario terbawah adalah # 6 dan # 17, yang memiliki "pragma syncous = off", sehingga tidak mengejutkan bahwa mereka adalah yang tercepat. Cluster tiga berikutnya adalah # 7, # 11, dan # 19. Ketiganya disorot dengan warna biru pada "peta konfigurasi" di atas. Pada dasarnya konfigurasi adalah cache tulis pada, penghalang = 0, dan data diatur ke sesuatu selain 'jurnal'. Mengubah komit antara 5 detik (# 7) dan 60 detik (# 11) tampaknya membuat sedikit perbedaan. Pada tes ini sepertinya tidak ada banyak perbedaan antara data = dipesan dan data = penulisan kembali, yang mengejutkan saya.
The pembaruan campuran uji puncak tengah. Ada sekelompok skenario yang lebih jelas lebih lambat pada tes ini. Ini semua adalah data = jurnal . Kalau tidak, tidak ada banyak di antara skenario lainnya.
Saya memiliki tes pengaturan waktu lain, yang melakukan campuran sisipan, pembaruan, dan penghapusan yang lebih heterogen pada berbagai jenis kombinasi. Ini membutuhkan waktu lebih lama, itulah sebabnya saya tidak memasukkannya dalam plot di atas:
Di sini Anda dapat melihat bahwa konfigurasi writeback (# 19) sedikit lebih lambat daripada yang dipesan (# 7 dan # 11). Saya berharap penulisan kembali menjadi sedikit lebih cepat, tapi mungkin itu tergantung pada pola tulis Anda, atau mungkin saya belum cukup membaca di ext3 :-)
Berbagai skenario agak mewakili operasi yang dilakukan oleh aplikasi kita. Setelah memilih daftar skenario pendek, kami menjalankan tes pengaturan waktu dengan beberapa suite pengujian otomatis kami. Mereka sejalan dengan hasil di atas.
Kesimpulan
Terima kasih kepada @Huygens untuk berbagai tips dan petunjuk.
sumber