Bagaimana cara mengkonfigurasi array RAID drive SSD pada SQL Server saya?

14

Saya sedang membangun SQL Server dengan 48 GB RAM, 1 CPU, & 8 SATA III (6GB / s) drive SSD (128 GB Crucial m4) dan kontroler LSI MegaRAID (SAS 9265-8i). Saya berharap beban kerja kebanyakan terbaca. Akan ada beberapa periode kegiatan menulis yang lebih berat (sinkronisasi data per jam dengan penyedia data pihak ketiga - pencadangan malam), tetapi saya menduga rasio baca / tulis tipikal adalah sekitar 90% baca / 10% tulis.

Opsi 1:
Drive Logical C: - RAID 1 (2 drive fisik) -
Drive Logical D: - RAID 10 (6 drive fisik) - File DB / log / tempdb / backup?

ATAU

Opsi 2:
Logical Drive C: - RAID 1 (2 drive fisik) -
Drive logis OS D: - RAID 1 (2 drive fisik) - File Db
Logical Drive E: - RAID 1 (2 drive fisik) - log file / backup?
Logical Drive F: - RAID 1 (2 drive fisik) - tempdb

ATAU

Opsi 3:
Saran lain?

Saya berpikir opsi 1 akan memberi saya kinerja yang lebih baik, karena semua aktivitas DB akan dilucuti di 3 drive (dan dicerminkan di 3 lainnya dalam array), meskipun opsi 2 tampaknya meniru kebijaksanaan konvensional (yang tampaknya lebih banyak diterapkan pada mekanik drive dari SSD). Sepertinya Stack Overflow telah berjalan dengan opsi 1 .

Saya menduga dengan SSD, tidak apa-apa untuk meletakkan segala sesuatu di satu drive logis karena server Anda mungkin lebih banyak CPU daripada I / O dibatasi pada saat itu?

Pertanyaan lain yang saya miliki adalah di mana saya harus meletakkan cadangan malam? Kami tidak ingin cadangan memperlambat sisa SQL server, dan saya kira menulis cadangan lokasi yang sama dengan log adalah praktik yang baik karena perilaku baca / tulis dalam kedua kasus tersebut adalah penulisan berurutan.

Robbie
sumber
Saya pernah memegang keyakinan bahwa ada manfaat untuk distribusi logis, tetapi setelah beberapa penelitian yang cukup luas (Michael mungkin masih memilikinya), kami sampai pada kesimpulan bahwa distribusi logis @ level target tidak meningkatkan kinerja. Jadi jika kita berbicara disk fisik (pemintalan), dan Anda menginginkan 8 file data untuk memanfaatkan afinitas inti, tidak masalah jika mereka 8 file pada volume logis tunggal (pada disk fisik yang sama) atau jika Anda memotong 8 partisi logis untuk 8 file tersebut (pada disk fisik yang sama). Saya pikir Anda akan menemukan itu mirip secara logis memotong SSD Anda
Eric Higgins

Jawaban:

9

Kebijakan konvensional tentang RAID tidak berlaku untuk SSD. Mereka tidak benar-benar perlu striping (RAID0). Mereka rentan terhadap kegagalan oleh-desain, tapi RAID-1 biasanya bukan jawaban yang tepat untuk SSD karena dua alasan: a) adalah boros, bagian kapasitas array SSD (dan mereka yang mahal) dan 2) SSD karakteristik kegagalan lead menuju kedua drive di cermin gagal pada interval yang sangat dekat (mis. kegagalan berkorelasi) dan dengan demikian membuat seluruh array tidak berguna. Lihat Differential RAID: Memikirkan Kembali RAID untuk Keandalan SSD untuk diskusi yang lebih panjang. Beberapa merekomendasikan menggunakan Raid-6 untuk SSD.

Selain itu, kebijakan konvensional tata letak file SQL Server tidak berlaku untuk SSD. Saya akan merekomendasikan Anda menonton SQL pada SSD: Hot and Crazy Love dan membaca tautan benchmark dalam jawaban ini .

Remus Rusanu
sumber
Poin bagus, dengan RAID 10, saya mungkin lebih rentan terhadap kegagalan yang berhubungan. Terima kasih atas tautan RAID Diferensial.
Robbie
8

Pendekatan standar untuk memisahkan pola IO acak untuk data dari urutan log tidak berlaku pada SSD, jadi saya akan memilih opsi 1 dengan peringatan:

  • Cadangkan HARUS ke mesin yang terpisah. Ada sedikit gunanya memiliki cadangan yang tidak dapat Anda akses jika server dalam keadaan asap.
  • Ada beberapa nilai dalam memisahkan data dan drive log sehingga kegagalan array data akan memungkinkan Anda mengambil cadangan log.
  • Ingatlah bahwa Anda tidak memiliki cadangan panas.
  • Ingatlah bahwa Anda memiliki drive tingkat konsumen. Jangan berasumsi bahwa mereka akan dapat diandalkan seperti perusahaan yang setara dengan kelipatan biaya.
  • Tonton SQL menghibur dan sangat informatif tentang SSD: Cinta Panas dan Gila oleh Brent Ozar.

Masalah memisahkan log dari data di mana SSD digunakan adalah masalah RPO (tujuan titik pemulihan) untuk sistem, bukan kinerja. Jika RPO didefinisikan dalam beberapa menit, pergi dengan satu larik bersama dan ambil cadangan log setiap [RPO] menit. Jika RPO didefinisikan dalam hitungan detik, pergi dengan array yang terpisah.

Sejujurnya, jika RPO ketat saya akan menyimpan SSD untuk array data dan menggunakan sepasang pemintal yang dapat diandalkan (perusahaan) untuk log.

Mark Storey-Smith
sumber
Backupnya adalah juga disalin ke mesin yang terpisah. Mereka dibuat di mesin lokal sehingga saya bisa menggunakan SQL Compare / Data Compare dan mengembalikan perubahan dalam kasus regresi / kesalahan pengguna.
Robbie
Juga, RPO didefinisikan dalam hitungan menit (saya pikir bahkan dalam 10-an menit akan dapat diterima untuk skenario saya sepenuhnya jujur). Posting Hot & Crazy Love membuat saya berpikir tentang kegagalan yang berhubungan. Dalam pengalaman saya yang terbatas, saya memiliki lebih banyak kegagalan motherboard & kegagalan total sistem (catu daya / lonjakan daya goreng semuanya) kemudian mendorong kegagalan, jadi saya masih mencoba untuk menentukan tingkat paranoia / pencegahan yang paling efektif dari segi biaya.
Robbie
1

Anda harus pergi dengan opsi 2 sebagai berikut:

Logical Drive - RAID 1 (2 physical drives)
 1 partition C: OS
 2 partition D: backups / log files
Logical Drive E: - RAID 1 (2 physical drives) - DATA files
Logical Drive F: - RAID 1 (2 physical drives) - INDEX files
Logical Drive G: - RAID 1 (2 physical drives) - tempdb

Dengan memisahkan data Anda dan indeks Anda dalam 2 file data yang berbeda yang kemudian disimpan dalam 2 drive logis fisik yang berbeda, Anda akan memperoleh peningkatan besar dalam disk io hanya karena ketika Anda query, Anda akan memiliki satu disk berputar untuk data tabel Anda dan lainnya berputar untuk indeks Anda secara bersamaan.

Biarkan tempdb terpisah dari cadangan Anda juga karena banyak hal terjadi di sana juga. Jangan mencampur cadangan Anda dan file data Anda. meskipun backup tidak dilakukan setiap hari, ketika mereka terjadi mereka mengambil hit besar pada IO Anda. berdasarkan bisnis Anda dan penggunaan database Anda, beberapa orang atau BANYAK orang mungkin mengeluh selama waktu cadangan.

Semoga ini membantu

Nicolas de Fontenay
sumber
6
Omong kosong. Ini adalah SSD, bukan pemintal.
Mark Storey-Smith
tidak omong kosong bahkan dengan sdd ada sejumlah kinerja yang dicapai dengan cara itu, meskipun tidak sebanyak.
Nicolas de Fontenay
2
Bahkan dengan pemintal pemisahan data dari indeks tidak ada nilainya sampai Anda bermain di wilayah SQLCAT. Kasus untuk memisahkan tempdb juga tidak pernah jelas dipotong dan sangat sangat jarang berlaku dengan sejumlah kecil disk.
Mark Storey-Smith