Saya pernah mendengar bahwa kinerja penulisan RAID 5 kadang-kadang mengerikan. Meskipun saya ingin redundansi yang disediakannya, saya tidak ingin mengorbankan waktu penyisipan / pembaruan basis data saya.
Apakah ini sesuatu yang saya harus khawatirkan dan jika demikian, apa rekomendasi untuk mendapatkan redundansi dengan kinerja penulisan yang baik?
performance
raid
database
Scott Saad
sumber
sumber
Jawaban:
RAID 10 biasanya disarankan karena I / O begitu acak. Ini sebuah contoh. Perhitungannya sedikit disederhanakan, tetapi cukup representatif.
Katakanlah Anda memiliki 6 drive array dan drive Anda dapat melakukan 100 I / Os per detik (IOPS). Jika Anda memiliki 100% bacaan, keenam drive tersebut akan digunakan dan Anda akan memiliki sekitar 600 IOPS untuk RAID 10 dan RAID 5.
Skenario kasus terburuk adalah 100% menulis. Dalam skenario itu, kinerja RAID 10 akan dipotong setengah (karena masing-masing menulis pergi ke dua drive), sehingga akan mendapatkan 300 IOPS. RAID-5 akan mengubah setiap penulisan menjadi dua pembacaan diikuti oleh dua penulisan, sehingga akan mendapatkan 1/4 kinerja atau sekitar 150 IOPS. Itu sukses besar.
Pola baca / tulis Anda yang sebenarnya akan berada di antara dua ekstrem ini, tetapi inilah mengapa RAID 10 biasanya direkomendasikan untuk basis data.
Namun, jika Anda tidak memiliki server database yang sibuk, maka Anda bahkan bisa melakukan RAID-6. Saya sering melakukan itu jika saya tahu database tidak akan menjadi hambatan karena memberi Anda lebih banyak keamanan daripada RAID 10 atau RAID 5.
sumber
Database transaksional
RAID-5 relatif lambat untuk ditulis karena pengontrol perlu memuat data yang cukup untuk menghitung ulang paritas pada penulisan. Operasi tulis akan menimbulkan setidaknya empat operasi disk:
Membaca di blok paritas
Membaca di blok lama (dengan asumsi itu belum ada dalam cache) untuk XOR nilai dengan blok paritas.
Menulis blok paritas baru (blok paritas lama XOR blok data lama XOR blok data baru)
Menulis blok data baru.
Jika sistem tidak menggunakan cache write-back, ini berarti bahwa semua operasi ini berada di jalur kritis untuk penyelesaian I / O. Seringkali, ini adalah kasus dengan penulisan database - pada kenyataannya, Microsoft (misalnya) memiliki program sertifikasi untuk peralatan SAN untuk digunakan dengan SQL server yang mengharuskan vendor untuk menjamin perilaku ini. Kadang-kadang peralatan RAID-5 yang lebih lama tidak menggunakan optimasi ini dan harus menghitung ulang paritas dari seluruh strip.
RAID-10 memiliki mirror untuk setiap drive tunggal dan tidak perlu membaca data tambahan untuk menghitung paritas. Ini berarti bahwa menulis membutuhkan I / O fisik yang jauh lebih sedikit.
RAID-50 berada di suatu tempat di tengah, dengan volume dibagi menjadi beberapa volume RAID-5, yang pada gilirannya bergaris-garis. Pada RAID-50 yang dibuat dari grup yang di-strip dalam skema 3 + 1, sebuah penulisan menghasilkan paling banyak tiga permintaan I / O disk tambahan. Jika Anda merasa sangat ingin, Anda dapat melihat RAID-5 dan RAID-10 sebagai kasus khusus RAID-50. RAID-50 terutama digunakan untuk menyediakan volume besar di banyak disk fisik
Skema paritas lain seperti RAID-6 (skema paritas dengan dua disk redundan per set) juga ada, disk modern cukup besar sehingga mem-rebulding sebuah array bisa memakan waktu yang cukup lama - cukup lama sehingga risiko kegagalan disk kedua selama membangun kembali cukup signifikan. RAID-6 mengurangi risiko ini dengan memiliki paritas disk kedua, yang membutuhkan tiga kegagalan disk untuk menyebabkan kehilangan data. Trik serupa dengan skema RAID-50 dapat digunakan untuk membuat array RAID-60.
Akhirnya, pasangan cermin tunggal (dikenal sebagai RAID-1) dapat memberikan redundansi dan kinerja yang cukup baik untuk beberapa tugas. Secara khusus Anda mungkin akan menemukan bahwa RAID-1 memberi Anda throughput yang cukup untuk cukup banyak lalu lintas log basis data. Lebih lanjut tentang ini di bawah ini.
Jika Anda memiliki beban kerja tulis-berat, Anda mungkin akan mendapatkan peningkatan kinerja dari volume RAID-10. Ini bisa menjadi kemenangan karena Anda mungkin bisa mendapatkan throughput yang diperlukan dari sejumlah kecil disk fisik, dengan asumsi disk memiliki cukup ruang). Beberapa item seperti log atau area temporay pada server database harus pada volume RAID-1 atau RAID-10, karena ini mendapatkan banyak lalu lintas tulis.
Log
Volume log ditandai oleh sebagian besar pola akses data berurutan, dan pada dasarnya merupakan buffer cincin yang terdiri dari perintah di sepanjang garis 'tulis data ini ke blok ini' Mereka ditulis sebagai produsen oleh mesin DBMS inti dan diproses sebagai conumer oleh fungsi pembaca log. Sepasang cermin tunggal sebenarnya akan menangani cukup banyak lalu lintas log.
Sistem baca berat dan server file
Pada sistem baca-berat seperti gudang data Anda mungkin ingin menggunakan satu atau lebih volume RAID-5. Pada server file, akses disk sebagian besar akan dilakukan pada seluruh file, jadi menulis mungkin akan menulis sebagian besar blok yang membentuk blok paritas. Dalam hal ini penalti kinerja untuk RAID-5 akan lebih ringan.
Di masa lalu penghematan biaya pada disk mungkin signifikan tetapi ini cenderung menjadi masalah sekarang.
Caching balasan dan RAID-5
Pada SAN atau pengontrol RAID internal dengan cache yang didukung baterai Anda mungkin dapat mengaktifkan caching 'Write-back'. Tembolok ini menulis dan mengembalikan kontrol ke aplikasi. I / O dilaporkan oleh controller sebagai selesai. Namun, itu tidak serta merta menuliskan data ke disk segera. Fasilitas ini memungkinkan operasi baca / tulis paritas RAID-5 secara substansial dioptimalkan dan dapat melunakkan penalti kinerja tulis untuk volume RAID-5x.
Namun, ini masih membawa risiko kecil masalah integritas data. Sistem host telah diberitahu bahwa penulisan ini telah selesai ketika ini tidak benar-benar terjadi. Dimungkinkan untuk kegagalan perangkat keras membuat inkonsistensi data antara (katakanlah) log dan volume data pada server database. Karena alasan ini, cache balasan tidak disarankan untuk sistem transaksional, meskipun mungkin ini merupakan kemenangan kinerja untuk sesuatu seperti proses ETL.
Ringkasan
Ruang disk saat ini sangat murah sehingga sistem transaksional mungkin harus menggunakan RAID-1 atau RAID-10 untuk volume log dan RAID-10 untuk volume data. Ukuran disk fisik cenderung jauh lebih besar dari database dan RAID-10 akan memungkinkan throughput penulisan lebih banyak untuk jumlah disk yang sama, berpotensi mengurangi jumlah volume disk yang diperlukan untuk mendukung sistem.
Pada sesuatu seperti gudang data Anda masih dapat mengunyah ruang dengan tabel fakta yang besar dan sangat terindeks sehingga Anda mungkin mendapatkan kemenangan harga yang kecil dengan volume data RAID-5 atau RAID-50. Namun log dan tempdb masih harus ditempatkan pada volume RAID-10 karena mereka mungkin akan mendapatkan banyak pekerjaan selama pemrosesan ETL. Namun, penghematan biaya pada disk cenderung cukup kecil.
sumber
Yah, itu sangat tergantung pada kesalahan Anda / toleransi risiko. RAID5 memiliki banyak masalah . Server DB saya saat ini memiliki dua drive mirrored, dan jika saya meningkatkannya, saya akan mencari sesuatu dengan paritas yang lebih banyak, mungkin RAID6 atau RAID10.
Juga, jika aplikasi Anda kritis terhadap waktu, saya mungkin akan merekomendasikan memiliki dua server database dengan replikasi, master-master atau cadangan panas atau apa pun. RAID hanya membantu melawan kegagalan disk, tetapi ada banyak lagi yang bisa salah pada server :)
sumber
Tergantung pada seberapa banyak tulisan yang Anda lakukan.
Jika itu adalah "aplikasi web" yang cukup ringan, maka Anda tidak mungkin melihat kinerja apa pun mencapai RAID5.
Jika Anda sedang membangun gudang data multi-GB dengan ETL besar, maka buffer tulis pada RAID 5 akan dengan cepat meluap dan langsung menuju "kinerja penulisan yang buruk" dari RAID 5.
Setiap penulisan RAID5 akan menyebabkan setidaknya 3 penulisan (ditambah perhitungan CRC). Ketika buffered, ini baik dan cepat (ledakan kecil singkat aktivitas - pembaruan dan sisipan catatan tunggal). Jika ini berkelanjutan menulis (masukkan / pembaruan massal besar) maka akan diperhatikan.
Ini adalah keseimbangan antara kinerja dan ruang. RAID 10 (mirror of striped drive) memberikan kinerja dan ketahanan, tetapi pengurangan 50% dalam kapasitas.
RAID5 memberikan kapasitas yang lebih tinggi, kinerja membaca yang baik tetapi kinerja penulisan yang buruk (besar).
sumber
RAID 1, itulah jawaban terakhir saya
Alasan:
mirrored pair memberikan redundansi yang memadai untuk disk yang gagal dan RAID terus berfungsi ke disk terakhir.
pasangan cermin menghasilkan kinerja I / O yang lebih besar untuk dibaca jika Anda menempatkan data dan indeks dengan cermat ... [petunjuk: Gunakan volume terpisah untuk data dan indeksnya]. Anda bahkan dapat memperoleh lebih banyak kinerja dengan dupleks pengontrol Anda.
sumber
Untuk beberapa panduan "kenapa tidak" yang bagus, ini selalu sangat populer dengan Oracle DBA yang telah saya kerjakan ...
Pertempuran melawan Raid Five - http://www.miracleas.com/BAARF/
sumber
Jawaban singkat: tidak.
Jawaban panjang: kecuali Anda memiliki basis data yang sangat kecil atau persyaratan yang sangat minim, tidak. Pengambilan data sangat bergantung pada operasi I / O disk per detik, dan overhead striping akan memakan akses disk Anda dari waktu ke waktu, terutama dengan proses kueri yang panjang. Sebagian besar database dijalankan pada pengaturan gaya RAID 10, atau dengan volume tertentu yang menahan partisi data. Ya, RAID 10 akan dikenakan biaya dalam menulis, tetapi kinerja membaca Anda (dengan pengaturan yang tepat) akan naik .
sumber
Tembolok tulis balik yang besar. Tingkatkan RAM pada perangkat keras Anda RAID controller atau RAM yang tersedia untuk solusi RAID perangkat lunak Anda (yaitu untuk MDADM Linux meningkatkan RAM sistem, balon MDADM untuk menggunakan RAM sistem yang tidak digunakan sebagai cache tulis). Saran ini berlaku untuk nilai yang diberikan "besar" - jika Anda akan sering (5% dari waktu?) Menulis data pada tingkat yang cukup cepat untuk mengisi cache tulis tidak peduli seberapa besar itu maka ini akan membuat sedikit perbedaan.
sumber
Benar-benar tentang memisahkan file data Anda, file log, dari file OS Anda. Log menulis secara berurutan Data menimbulkan banyak pembacaan acak dan beberapa penulisan acak
Dengan membangun konfigurasi RAID yang mendukung sifat-sifat ini, Anda sangat meningkatkan kinerja
Raid 1 - mirroring sangat bagus untuk file log Raid 10 baik untuk file data Anda. Juga layak untuk melihat memisahkan TempbDB dan cadangan ke drive yang terpisah. Menambahkan filegroup adalah cara lain untuk meningkatkan kinerja. Dalam hal SAN, ini tidak begitu jelas. Itu tergantung apakah Anda sedang membangun konfigurasi serangan khusus untuk setiap LUN atau mengandalkan jumlah spindle.
sumber
Dalam semangat artikel blog StackOverflow baru - baru ini yang mengatakan kita tidak seharusnya menyajikan kembali jawaban yang sudah tersedia di Internet, saya tunjukkan ini
RAID-5 tidak unik dalam redundansi yang disediakannya, ia hanya melakukannya sambil mengonsumsi lebih sedikit disk tambahan daripada beberapa alternatif. Anda dapat memilih sesuatu yang lain dengan redundansi yang sama atau lebih baik dan kinerja penulisan yang lebih baik
sumber
Menjalankan database dari RAID5 biasanya merupakan kesalahan. Saya hanya melihat hal itu dilakukan dalam dua kasus - database yang direkayasa dengan baik yang intensif baca dengan sedikit tulisan, dan database di mana "membuang-buang ruang" karena RAID5 tidak layak secara politik.
RAID5 akan menghancurkan kinerja transaksional.
Juga, jika Anda mempertimbangkan RAID5, lihat apakah Anda bisa membuat RAID6 berfungsi. Keandalan teoretis jauh lebih baik, meskipun keandalan dunia nyata seringkali lebih buruk karena implementasi yang belum matang.
sumber