Apa konfigurasi RAID yang disarankan untuk database Oracle?

16

RAID (Redundant Arrays of Inexpensive Disk) hadir dengan konfigurasi yang berbeda (RAID-0, RAID-1 ...). Apa konfigurasi RAID yang disarankan yang harus saya atur dan gunakan ketika menginstal database Oracle. Basis data terutama akan digunakan sebagai gudang data.

Eddie Awad
sumber
RAID0 dan RAID1 adalah hal yang sangat berbeda. Anda menggunakan RAID0 hanya untuk kinerja dan RAID1 hanya untuk toleransi kesalahan jika terjadi kegagalan drive.
Jonas
4
RAID0 seharusnya tidak pernah digunakan pada server database. Kecuali tentu saja Anda suka memulihkan dari tape.
mrdenny

Jawaban:

13

Tergantung. Saat melihat gudang data, jika Anda tidak memiliki desain khusus, manajemen penyimpanan otomatis mungkin merupakan rute yang sangat baik.

Pertimbangkan diskusi di AskTom , Forum OTN , Forum OTN 2 , dan Forum OTN 3 .

Tidak ada satu cara yang tepat untuk menangani berbagai hal, dan jawabannya berubah berdasarkan sejumlah faktor perangkat keras dan jaringan. Untuk menemukan sendiri, preload gudang data sampel (hanya satu atau dua pertunjukan, cukup untuk dimainkan) pada mesin berbasis ASM, pada SAN dengan Raid yang divirtualkan oleh linux dan pada perangkat raid berbasis perangkat keras.

Dengan menentukan waktu hasil kueri pada ketiga lingkungan, Anda akan dapat menemukan metodologi mana yang paling cocok untuk Anda yang berdasarkan kinerja. Saya telah menggunakan basis data menggunakan ASN dan serangan virtual berbasis linux, dan serangan virtual berperilaku sedikit lebih baik (beberapa tahun yang lalu.) Namun, saya menduga sebagian cara pemasangan drive.

Tidak ada jawaban benar tunggal. Jika Anda dapat memberikan kami detail lebih lanjut tentang ukuran dan persyaratan kinerja, dimungkinkan untuk menjelajahi berbagai test case

--Edit--

Setiap " grup disk " dapat terdiri dari satu atau lebih disk, direktori, atau file pada subsistem yang sesuai. Oracle merekomendasikan "Untuk kinerja dan keandalan terbaik, pilih perangkat RAID atau volume logis pada lebih dari satu perangkat fisik dan terapkan metodologi stripe-and-mirror-everything (SAMA)." saat menempatkan file pada sistem file. Itu berbunyi seolah-olah oracle merekomendasikan RAID 1 + 0.

Namun, grup disk yang dikelola ASM, "Grup disk redundansi normal memerlukan minimal dua grup kegagalan (atau dua perangkat disk) jika Anda menggunakan mirroring dua arah. Ruang disk yang efektif dalam grup disk redundansi normal adalah setengah dari jumlah ruang disk di semua perangkatnya "tampaknya secara otomatis menyediakan mirroring.

Perangkat ini sendiri dapat terdiri dari perangkat RAID, dan sebagainya. Dalam tes praktis ketika saya menyiapkan gudang data RAID, virtual RAID 5 sederhana pada sistem file memberikan kinerja yang dapat diterima, dan ASM tambahan menambahkan tidak ada manfaat kinerja. Dalam tugas optimasi semacam ini, pertama-tama identifikasi sumber daya Anda, dan kemudian uji setiap konfigurasi yang mungkin, karena kadang-kadang hasilnya bisa sangat berlawanan dengan intuisi.

Brian Ballsun-Stanton
sumber
1
Serangan virtual terdengar sangat lucu: /
jcolebrand
10

Jika Anda memiliki dua drive fisik:

RAID0: Cepat tapi tidak ada redundansi. Kesalahan drive apa pun akan mematikan seluruh array. Beberapa orang menaruh penyimpanan sementara pada RAID0 (yaitu tempdb di bawah MSSQL) tapi saya masih akan menganggap ini berbahaya karena sementara Anda tidak akan kehilangan data yang berarti jika array jatuh Anda akan memiliki pemadaman server sampai situasi itu diperbaiki.

RAID1: Lakukan ini jika Anda memiliki dua drive. Tidak ada manfaat kinerja menulis meskipun Anda mungkin melihat peningkatan kinerja baca dengan controller yang baik. Fitur utama RAID1 adalah bertahan dari salah satu drive yang sekarat.

Jika Anda memiliki tiga drive fisik:

Pilihan Anda adalah RAID5, RAID10 3-drive non-standar (atau RAID1E sebagai pengendali IBM menyebutnya) jika didukung. Anda tentu saja dapat menggunakan RAID1 dan menyimpan drive ekstra sebagai cadangan ketika salah satu dari yang lain gagal, tetapi Anda harus tetap menyimpannya di lingkungan kritis misi sehingga hal ini tidak perlu dikatakan lagi.

RAID5 menawarkan lebih banyak ruang daripada RAID10 (dua drive bernilai bukannya satu-setengah) tetapi memiliki potensi masalah kinerja penulisan karena untuk setiap blok ditulis pengontrol perlu membaca blok paritas, memperbaruinya, dan menuliskannya kembali. Masalah kinerja penulisan ini dapat digandakan untuk penulisan basis data karena setidaknya ada dua penulisan untuk setiap pembaruan: satu ke log transaksi dan satu ke area data aktual. Karena ruang yang murah hari ini saya akan merekomendasikan 3-drive RAID10 jika didukung untuk kinerja penulisan yang lebih baik. RAID perangkat lunak Linux menawarkan ini, seperti halnya banyak pengontrol IBM (mereka menyebutnya RAID1E). Anda mungkin menemukannya dengan nama lain juga karena tidak dianggap sebagai pengaturan standar sehingga tidak memiliki nama standar.

Baik R5 dan R10-over-three memberikan redundansi yang sama (salah satu drive dapat gagal pada suatu waktu dan array akan bertahan) dan metrik kinerja baca yang serupa (mirip dengan array RAID0 dua drive).

Jika Anda memiliki empat drive fisik:

Jika membuat hanya satu array maka ada dua opsi (mengabaikan variasi "dengan cadangan panas"): RAID6 dan RAID10 "tradisional" (sebuah RAID0 dari RAID1s).

Keduanya memberikan ruang yang sama (dua drive dari empat Anda). RAID6 memberikan redundansi yang lebih baik karena setiap dua drive dapat gagal pada saat di mana RAID10 hanya dapat bertahan empat dari enam situasi dua drive yang mungkin hilang. Keduanya memberikan kinerja baca simialr tetapi RAID6 memiliki masalah kinerja penulisan yang mirip dengan RAID5 (sama pada controller yang baik, meskipun bisa lebih lambat dari pada RAID5 pada controller yang buruk atau dengan perangkat lunak RAID tergantung pada OS dan kemampuan kontrol I / O. RAID10 adalah biasanya lebih disukai untuk database karena alasan kinerja - jika Anda memerlukan redundansi tambahan, Anda dapat menggunakan enam drive dan memiliki RAID0 atau 2 3-drive RAID1s.

Setelah Anda memiliki empat drive atau lebih meskipun hal-hal menjadi lebih menarik karena Anda bisa memiliki sepasang array RAID1 terpisah. Ini dapat menawarkan manfaat kinerja yang signifikan dengan disk pemintalan dengan menyimpan data Anda pada satu larik dan log transaksi pada yang lain - ini dapat mengurangi pergerakan head secara signifikan dalam beberapa kasus dan mencari waktu karena akses "acak" adalah pembunuh kinerja nyata. Untuk data warehouse, dengan asumsi ini berarti akan melihat sangat sedikit menulis relatif berbicara, memisahkan log transaksi dari file data mungkin manfaat lebih terbatas tetapi Anda mungkin masih ingin mempertimbangkan beberapa array dan bukannya mempartisi data Anda di atasnya untuk berpotensi membaca kinerja yang lebih baik .

Jika Anda memiliki lebih dari empat drive:

Pilihan Anda menjadi terbuka lebar di sini dan itu benar-benar tergantung pada apa data Anda dan apa pembaruan / baca beban / pola yang Anda harapkan. Misalnya, sekali layanan kami berjalan pada drive 12 ~ 70Gb:

  • 4x sebagai RAID10 untuk area sistem (OS, SQL Server (MSSQL dalam kasus kami), swap, tempdb).
  • 4x sebagai RAID10 untuk file data
  • 4x sebagai RAID10 untuk log transaksi

Tempdb disimpan di sistem array. Kita dapat memindahkannya ke dua array lain dan menjalankan array sistem sebagai 2 drive di RAID1 karena kecepatan ekstra tidak terlalu diperlukan untuk potongan sistem (karena itu hanya sangat signifikan selama boot atau ketika bertukar dan kami memastikan ada RAM yang cukup untuk itu tidak perlu swap), tetapi dengan cara kami membayar penyedia hosting untuk set mesin itu, kami tidak perlu mengeluarkan biaya lebih sedikit untuk menjatuhkan dua drive. Cadangan juga masuk ke susunan sistem, sebelum disalin ke lokasi cadangan di luar server, di luar situs, dan di luar jaringan.

Tentu saja ini sangat berat untuk beberapa database (tidak akan ada gunanya menjalankan server blog kecil dengan cara ini!) Tetapi aplikasi utama kami berkinerja sangat baik dengan pengaturan ini.

Jika Anda memiliki enam drive, Anda dapat mempertimbangkan tiga array RAID1, atau dua array RAID10 tiga drive.

Umumnya

Sayangnya tidak ada "praktik terbaik" yang sangat sederhana karena sangat tergantung pada ukuran dan pola penggunaan sistem Anda. Satu-satunya aturan umum yang dapat saya pikirkan atau adalah:

  • hindari RAID5 dan 6 kecuali Anda tahu masalah kinerja penulisan tidak akan memengaruhi Anda secara signifikan
  • dengan empat atau lebih drive berbasis disk berputar mempertimbangkan pemisahan beberapa array lebih untuk mengurangi pergerakan head (manfaat penuh dari beberapa array tidak akan berlaku untuk SSD yang baik karena tidak ada pergerakan head fisik yang perlu dipertimbangkan, meskipun Anda mungkin melihat beberapa perbedaan tergantung pada strategi kombinasi tulis pengontrol SSD dan sebagainya)
  • uji, uji dan uji lagi: selalu baik untuk mencoba mencari waktu untuk memverifikasi bahwa pengaturan yang Anda pilih memang optimal

RAID Perangkat Keras atau Perangkat Lunak?

Dulu kinerja perangkat lunak RAID berada di bawah RAID perangkat keras untuk RAID 5 karena perhitungan paritas dan untuk semua pengaturan karena antarmuka yang lambat antara drive dan CPU. Dengan CPU modern, masalah paritas calc tidak benar-benar menjadi masalah, tetapi jika Anda memiliki hard disk drive yang sangat cepat, RAID masih bisa menang jika kecepatan total drive dapat terjadi di mana saja.dekat (dalam urutan besarnya, pada perkiraan) untuk seberapa cepat mesin dapat berbicara dengan pengontrol disk. Jika Anda memiliki array RAID1 empat drive (yaitu empat salinan data yang sama untuk banyak redundansi) dengan perangkat lunak RAID setiap operasi penulisan akan menghasilkan OS yang mengirim empat banyak data ke pengontrol I / O, mungkin secara berurutan - dengan perangkat keras controller OS hanya mengirimkan satu permintaan tulis dan controller mengirimkannya ke empat drive, mungkin secara paralel.

RAID perangkat keras yang baik juga dapat menawarkan keuntungan lain: beberapa pengendali spesifikasi tinggi memiliki cache tulis dengan cadangan baterai sehingga penulisan yang tertunda tidak hilang dalam pemadaman listrik walaupun UPS Anda gagal, misalnya.

RAID perangkat lunak jelas lebih murah, dan lebih portabel sehingga Anda tidak terikat dengan pengontrol tertentu jika Anda harus memindahkan array karena kegagalan pengontrol / mesin.

RAID perangkat keras yang murah biasanya menggabungkan hal negatif dari perangkat lunak dan perangkat keras RAID dengan sedikit (atau tidak ada) manfaat dari keduanya sehingga sebaiknya dihindari.

Saya cenderung menggunakan RAID perangkat lunak pada server dev, test dan UAT kami dan RAID perangkat keras yang baik untuk server yang menjalankan layanan langsung yang berhubungan dengan pelanggan / publik.

David Spillett
sumber
5

The " Oracle Database Performance Tuning Panduan " memiliki bab didedikasikan untuk I / O Configuration . Pendeknya:

  • Gunakan striping (RAID perangkat keras, perangkat lunak RAID, ASM)
  • Jangan gunakan RAID5 untuk Pengarsipan dan ulangi log
  • Sejajarkan ukuran blok Sistem File dan ukuran blok DB
Benoit
sumber
4

Dalam beberapa kasus, JBOD adalah jawaban yang benar (yaitu, bukan RAID).

Masalahnya adalah, jika Anda memiliki terlalu banyak grup RAID, Anda tidak memiliki fleksibilitas untuk menentukan bagaimana penyimpanan fisik diletakkan dalam database, seperti memastikan bahwa indeks dan catatan untuk tabel disimpan pada spindle yang terpisah, dan pastikan Anda menyeimbangkan penulisan di semua disk Anda.

Anda dapat menggunakan striping (RAID0) untuk menyeimbangkan penulisan, tetapi jika itu semua satu kelompok besar, Anda tidak dapat memisahkan indeks vs catatan.

Mirroring (RAID1) toleran terhadap kesalahan, dan lebih cepat untuk dibaca (karena Anda dapat membaca dari mana gelendong tidak sibuk), tetapi bisa lebih lambat untuk menulis karena Anda harus menunggu kedua salinan telah ditulis.

Saya tidak akan pernah menggunakan RAID5 atau RAID6 pada database. Jika data penting, beli lebih banyak disk dan gunakan RAID1; RAID5 / 6 lambat (terutama dalam perangkat lunak), dan dengan ukuran hard drive saat ini mungkin perlu berhari - hari untuk membangun kembali setelah mengganti disk yang gagal untuk grup disk besar ... belum lagi bahwa cara sebagian besar sistem RAID5 / 6 menangani kesalahan paritas adalah untuk hanya menghitung ulang paritas ... tetapi kemungkinan besar, kesalahan ada dalam data, bukan paritas tetapi Anda tidak tahu di mana kesalahan itu. (sayangnya, saya tidak berpikir ada sesuatu seperti LOCKSS untuk database)

...

Tata letak yang paling menarik yang saya lihat di database sebenarnya melibatkan memiliki dua partisi per spindle - bagian terdalam dari disk digunakan untuk database produksi, bagian-bagian lebih dari disk digunakan untuk cadangan. (dan mereka memastikan partisi tidak didukung ke spindle yang sama; Saya pikir ada beberapa database, jadi masing-masing didukung ke disk dari yang berbeda). Ini memberi mereka keuntungan menyebarkan berbagai hal di lebih banyak spindel selama hari kerja, dan kemudian pada malam hari, mereka menjalankan backup.

Saya menduga akan ada pemulihan yang lebih lambat jika terjadi kesalahan dan Anda perlu memulihkan, karena Anda akan memiliki beberapa bacaan dari disk luar yang terjadi saat database sedang digunakan sepanjang hari, tetapi selalu ada pengorbanan dalam segala hal.

...

Jadi, pokoknya, poin yang saya coba sampaikan - tidak ada satu jawaban yang cocok untuk setiap situasi. Jika ada, DBA akan kehilangan pekerjaan, dan perusahaan akan membeli peralatan database yang sudah dibangun sebelumnya.

Basis data yang saya tangani adalah yang oleh bos saya disebut sebagai 'WORN': Write Once, Read Never; dia bercanda, tetapi "gudang data" dapat berarti tingkat aktivitas apa pun ... Saya telah melihat beberapa yang dimuat dari kaset setiap malam / minggu (dan hanya salinan dari instance OLTP, dan membantu kami memverifikasi rekaman itu baik) dan pekerjaan analisis besar dijalankan pada mereka, dan yang lainnya di mana ada aliran input dan kesempatan yang konstan, tetapi tidak ada persaingan nyata untuk sumber daya.

Joe
sumber
1
Grr karena tidak memiliki upvotes. Saya akan kembali ke yang ini malam ini, karena saya suka beberapa poin Anda. Saya penggemar berat JBOD juga, atau lebih disukai banyak pasangan RAID1.
jcolebrand
@jcolebrand: sebenarnya, setelah saya memposting ini saya membaca di 'ASM' yang Brian Ballsun-Stanton sebutkan, dan sepertinya Oracle menangani mirroring + striping daripada di level OS / FS / hardware, jadi kami membuat poin yang sama, tetapi dia memberikan solusi yang lebih baik untuk pemasangan Oracle baru-baru ini.
Joe
Yang membutuhkan JBOD seperti yang Anda rekomendasikan, ya?
jcolebrand
@ jcolebrand: cukup banyak. (itu akan disarankan, tetapi saya pikir tidak diperlukan )
Joe
3

Rekomendasi saya untuk server selalu RAID 5 . Waktu dan upaya yang dihabiskan untuk memulihkan hard drive pertama Anda yang gagal akan selalu diingat. Jika Anda mengatur RAID array, saya sangat menyarankan Anda standarisasi pada ukuran drive tunggal dan menyimpan 2 hard drive cadangan di ruang server. Satu drive rusak? Masukkan salah satu penggantian (dan biarkan array membangun kembali). Saya telah melihat array RAID turun keras karena drive kedua memburuk ketika mereka sedang menunggu yang pertama tiba (pengiriman hari berikutnya masih terlambat).

Tangurena
sumber
Tetapi mengganti hard drive bukan domain DBA bukan? Memantau disk untuk seumur hidup dan tingkat kegagalan adalah untuk alat otomatis kerumunan SF. Jangan menduplikasi pekerjaan dan menghancurkan alasan spesialisasi. Bagaimanapun juga, kita adalah dba;)
jcolebrand
Raid 5 diimplementasikan dimana? Perangkat keras? Perangkat lunak? Peramal? Pada berapa banyak disk? Bagaimana dengan array drive yang direkomendasikan Oracle? Bukankah ini tujuan pengulangan log arsip?
Brian Ballsun-Stanton
2
RAID5 dapat memiliki masalah kinerja penulisan yang signifikan. RAID10 lebih umum untuk server DB.
David Spillett
@jcolebrand, Banyak perusahaan yang pernah bekerja untuk saya memperlakukan admin jaringan == admin server == admin basis data. Dalam beberapa, hanya ada beberapa orang yang memiliki akses ke pusat data produksi, sehingga orang-orang harus memakai 2 topi sekaligus. Di banyak tempat saya pernah bekerja, admin server tidak tahu apa yang sedang terjadi, oleh karena itu saya terlibat, jadi saya harus tahu pekerjaan mereka juga.
Tangurena
Yah itu keren dan menyebalkan pada saat bersamaan. Senang memiliki suara pengalaman;) [PS: milik saya menjadi +1]
jcolebrand
2

Berapa banyak data yang Anda rencanakan untuk digunakan dan seberapa sering Anda akan membaca vs menulis dari sistem? Ada banyak perencanaan yang membahas hal ini, cukup sehingga beberapa orang mencurahkan seluruh karir akademik untuk subjek tersebut.

Biasanya saya akan memberitahu Anda untuk membaca Wikipedia dan membaca artikel sebelum melanjutkan, karena ada beberapa jenis RAID dan masing-masing paling baik digunakan di tempat yang berbeda.

Dasar-dasarnya seperti ini:

RAID0

Bagus untuk gamer video. Buruk untuk orang lain. Ini tidak buruk untuk menggunakan server caching yang tidak perlu menyimpan data untuk waktu yang lama. Setelah disk gagal sistem mati. Permainan telah berakhir.

RAID1

Bagus untuk keandalan. Tidak banyak ekspansi. Cukup bagus dalam hal kecepatan.

RAID5

Campuran yang disukai antara RAID0 dan RAID1 (semacam).

Sekarang, setelah ini, itu benar-benar menjadi hampir sesuatu yang harus ditanyakan pada ServerFault karena fakta bahwa itu konfigurasi server lebih dari desain database. Selalu diskusikan kinerja server dengan Admin Server Anda. Untuk itulah mereka ada di sana. Jika ini bukan beta pribadi, saya akan memilih untuk menutup migrasi Anda di sana.

jcolebrand
sumber
2
Sementara ServerFault tentu tidak akan menjadi tempat yang salah untuk pertanyaan ini, di sini mungkin benar. Masalah kinerja I / O adalah sesuatu yang harus DBA sadari.
David Spillett
@ David Saya sangat setuju, tapi ada perbedaan dalam beig aware dan menspesifikasikannya sendiri. Dalam pengalaman saya, itu tidak pernah menjadi tugas satu orang ketika situs itu akan menjadi besar dan sibuk. Dua kepala lebih baik dari satu dan semua itu
jcolebrand