Konfigurasi drive optimal untuk SQL Server 2008R2

19

Saya memiliki server database yang cukup sibuk menjalankan SQL Server 2008 R2 yang memiliki pengaturan berikut:

  • SATA RAID 1 (2 Drive) - OS / Program
  • SAS RAID 10 (4 Drive) - File Database Sql (data dan log)
  • SAS RAID 1 (2 Drive) - TempDB (data dan log)

Dengan asumsi saya tidak dapat menambahkan drive tambahan ke server ini, sudahkah saya memanfaatkan konfigurasi yang saya miliki? Atau haruskah saya mempertimbangkan skema lain di sini di mana log diisolasi dari file data, misalnya?

Memperbarui:

Bagi mereka yang meminta perincian perangkat keras lebih lanjut:

  • Drive SATA (digunakan untuk partisi OS / Program) adalah: WD 7200 RPM 3 Gb / s 3.5 Inch SATA
  • Drive SAS yang digunakan dalam array lainnya adalah: Seagate 15K RPM 6 Gb / s 3,5 inci SAS
  • Pengontrol RAID yang digunakan adalah: LSI 9260-8i SAS / SATA 6 Gb 8 port

Pembaruan 2:

Berdasarkan umpan balik yang saya terima, sepertinya saya memiliki opsi yang layak untuk dipilih - Saya akan memberikan hadiah kepada seseorang yang dapat memberi tahu saya mana yang mungkin menjadi yang terbaik di lingkungan yang telah saya uraikan:

  1. Biarkan semuanya apa adanya - saya mungkin tidak akan melakukan yang lebih baik
  2. Pindahkan 2 SAS RAID 1 drive saya ke dalam array RAID 10 yang ada untuk membuatnya terdiri dari total 6 disk
  3. Pindahkan file log saya ke SAS RAID 1 dan / atau pindahkan TempDB (data atau log) kembali ke RAID 10
DanP
sumber
Pembaruan ke-2 Anda menanyakan pertanyaan yang persis sama dengan pertanyaan awal Anda, jadi jawaban yang asli berlaku. "... yang mungkin menjadi yang terbaik di lingkungan yang telah saya uraikan" ... Anda belum menunjukkan kepada kami analisis apa pun dari beban kerjanya, hanya saja "cukup sibuk", jadi sekali lagi jawaban yang sama berlaku .
Mark Storey-Smith
Dengan NVMe Kinerja Tinggi dan disk SSD lainnya di pasaran, RAID tidak lagi sangat penting dari perspektif SQL Server Disk Configuration Best Practices . Disk Pools (Storage Spaces) adalah cara untuk maju. Namun, Anda harus memisahkan volume secara logis untuk memecahkan masalah kinerja disk terkait dengan lebih baik.
Wajah IT

Jawaban:

14

Varian pertanyaan ini muncul secara semi-teratur:

Ada juga sesekali sanggul roti tentang pemisahan data / log "praktik terbaik".

Tanpa analisis yang lebih terperinci tentang apa yang dilakukan server ini, saran yang sama berlaku seperti yang diberikan sebelumnya.

  • RAID 1 untuk OS
  • RAID 10 (6 disk) untuk data / log / tempdb

Jarang ada titik dalam pemisahan dengan begitu sedikit spindle yang tersedia. Array tunggal dengan kapasitas IOP yang lebih besar biasanya akan menyerap gumpalan dan benjolan beban kerja Anda lebih baik dari 2 array yang lebih kecil.

Salah satu varian yang dapat diuji coba adalah menempatkan tempdb pada drive OS. Lakukan saja jika Anda memiliki beban kerja representatif yang dapat Anda putar ulang berulang kali, untuk memastikan perbandingan konfigurasi yang adil. Jika Anda menggunakan pengaturan produksi ini, pastikan pertumbuhan tempdb dibatasi sehingga Anda tidak secara tidak sengaja menggunakan semua ruang kosong pada drive OS.

Mengingat bahwa drive OS Anda adalah coaster 7200RPM, saya akan terkejut jika tempdb pada drive OS mengkonfigurasi manfaat apa pun.

Mark Storey-Smith
sumber
7

Itu semua tergantung pada beban kerja Anda, tetapi dengan hanya 6 drive itu membatasi pilihan Anda. Jika beban kerja Anda tidak terlalu bergantung pada tempdb untuk hal-hal seperti pengurutan, tabel hash, dan isolasi snapshot, maka Anda mungkin lebih baik menggunakan 6 SAS drive bersama di RAID 10. Namun, jika Anda tahu atau memiliki metrik untuk membuktikan bahwa tempdb banyak digunakan, maka Anda harus tetap terpisah seperti yang Anda miliki.

Patrick Keisler
sumber
Terima kasih atas jawabannya, mengubah konfigurasi rentang (sayangnya) bukan merupakan pilihan karena server ini dalam produksi. Saya ingin tahu tentang mengganti tempdb kembali ke RAID 10 dan meletakkan semua file log pada RAID 1 - apakah ini pilihan cerdas?
DanP
2
Ingat SQL Server perlu secara fisik menulis semua transaksi ke log sebagai bagian dari komit, sehingga Anda ingin kinerja penulisan tercepat mungkin dalam konfigurasi Anda. RAID 10 menawarkan kinerja penulisan yang lebih baik daripada RAID 1, jadi saya akan membiarkan log pada volume yang lebih cepat.
Patrick Keisler
2

Ini sangat tergantung pada apa yang Anda maksud dengan "sangat sibuk": pola beban kerja yang berbeda (menulis berat atau tidak, operasi massal umum atau tidak, tingkat akses bersamaan, untuk menyebutkan tetapi tiga dari banyak variabel) dapat memiliki efek drastis pada kinerja pengaturan spindle yang diberikan.

Untuk situasi berat penulisan yang memisahkan log dari data dapat membuat perbedaan yang signifikan karena setiap penulisan melibatkan pemutakhiran baik file log dan data, sehingga melibatkan sejumlah besar head flipping tambahan jika kedua set file berada pada set spindle yang sama .

Tanpa referensi lebih lanjut untuk beban kerja Anda (dan spesifikasi drive-drive itu dan pengontrol apa pun yang ada di antara mereka dan mesin) saya akan cenderung untuk pergi untuk tiga volume: satu untuk program OS + dan tempdb (data), satu untuk DB utama data, dan yang ketiga untuk log (baik tempdb dan DB utama).

Tentu saja jika beban kerja Anda semua sangat ringan pada operasi tulis maka Anda tidak perlu menghabiskan terlalu banyak waktu untuk khawatir tentang memisahkan data dan log, karena itu akan membuat sedikit perbedaan kinerja dan mendedikasikan volume keseluruhan untuk mereka akan sangat boros jika tersedia ruang.

David Spillett
sumber
Saya pasti akan menggambarkan lingkungan kita sebagai yang "menulis berat" - saya akan memperbarui pertanyaan saya dengan spesifikasi perangkat keras yang lebih rinci pada hari Senin.
DanP
Adakah yang tahu tentang jumlah drive yang dimiliki OP? Saya lebih memikirkan Raid 1 yang dia miliki untuk file log. Itu kedengarannya bukan pilihan yang bagus untuk keperluan menulis, dan file log AFAIK tidak terbaca terbatas, tetapi tulis ..
Marian
Saya telah menambahkan spesifikasi tambahan tentang perangkat keras mesin.
DanP
1
Kesalahpahaman ini mungkin merupakan akar dari banyak kata-kata kasar data / log, jadi maaf tapi saya akan membatalkannya. "... karena setiap penulisan melibatkan memperbarui log dan file data" - tidak, tidak. Menulis ke halaman data terjadi pada pos pemeriksaan, bukan pada setiap modifikasi.
Mark Storey-Smith
1
@ DavidSpillett Benar, akan selalu ada kasus di mana perpecahan bermanfaat. Kuncinya adalah Anda menguji dan memvalidasi bahwa konfigurasi itu bermanfaat untuk beban kerja tertentu.
Mark Storey-Smith
2

Jawaban sebenarnya tergantung pada kebutuhan Anda, tetapi umumnya "memasukkan data dan masuk ke berbagai array" lebih penting daripada "menempatkan tempdb pada arraynya sendiri".

Mengingat jumlah drive yang Anda miliki, titik awal saya adalah:

  1. Dua drive, RAID 1 - Sistem operasi, executable, pagefile.
  2. Empat drive, RAID 5 - Semua file data (atau RAID 1 + 0)
  3. Dua drive, RAID 1 - Semua file log

Yang harus dilakukan adalah menggunakan SQLIO untuk menguji kinerja berbagai konfigurasi drive.

Greenstone Walker
sumber
Ini jelas merupakan "sisi lain" dari saran yang saya baca. Saya berharap ada metode yang pasti untuk menentukan opsi mana yang lebih baik tanpa menggunakan "mencobanya" dalam lingkungan produksi.
DanP
2
@DanP Yah, saya pribadi akan pergi dengan saran Mark dan memilih RAID10 dengan sisa drive (kecuali OS). File log bersifat intensif menulis dan membutuhkan kinerja yang lebih baik daripada yang ditawarkan RAID 1, sejauh yang saya pikirkan. Tapi saya bukan ahli perangkat keras. Hanya 2 sen saya.
Marian
2
Saya harus menyebutkan bahwa pendapat saya hanya berasal dari pengalaman migrasi yang gagal ke server yang lebih baik, tetapi dengan kinerja yang lebih buruk. Kami tidak pernah menguji beban nyata pada server baru ini, kami tidak pernah memiliki kesempatan, server tidak siap tepat waktu. Ternyata pengujian server SEBELUM bermigrasi ke produksi harus WAJIB. Maaf atas penekanannya. Jadi mantra saya untuk semua migrasi / peningkatan adalah: UJI, UJI, UJI, ... tes panik sebanyak mungkin.
Marian
1
Tidak yakin apakah akan memulai dengan RAID 5 atau SQLIOSIM ... mari kita lanjutkan dengan yang pertama karena yang pertama berbicara sendiri. SQLIOSIM adalah alat pengujian kebenaran dan stres , ini bukan alat pengujian kinerja atau beban. Sama sekali tidak ada tempat dalam membandingkan kinerja config-X vs config-Y untuk beban kerja-Z. Semua yang akan memberitahu Anda adalah seberapa baik kinerja config-X terhadap config-Y dalam menjalankan SQLIOSIM. Jika Anda ingin membandingkan kinerja untuk beban kerja-Z, uji beban kerja-Z.
Mark Storey-Smith
1
@GreenstoneWalker "RAID1 lebih cepat untuk menulis daripada RAID1 + 0" tidak masuk akal. Dari mana ide ini berasal?
Mark Storey-Smith
-1

Bergantung pada apa Anda menggunakan DB untuk (OLTP vs pergudangan) konfigurasi Anda terlihat seperti konfigurasi umum yang baik. Jika Anda memiliki lebih banyak disk, Anda akan memiliki lebih banyak opsi.

Anda bisa mendapatkan kinerja yang lebih baik jika Anda mengganti disk untuk TempDB Anda ke RAID 0 (stripe). Ini meningkatkan risiko kegagalan, tetapi karena TempDB hanya buffer data, Anda tidak bisa mengalami kehilangan data. Jadi kebanyakan orang menganggap itu sebagai trade-off yang wajar. Simpan cadangan di sekitar (atau cadangan panas).

Satu hal yang tidak Anda sebutkan, tetapi bisa coba (jika belum): Microsoft merekomendasikan untuk membagi TempDB Anda menjadi beberapa file (satu per CPU). Tentu saja, yang terbaik adalah mereka berada di disk yang terpisah, tetapi hanya memiliki file yang terpisah membantu. http://msdn.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx

TimG
sumber
4
Tempdb digunakan untuk banyak hal, tetapi jangan memperlakukannya sebagai database yang dibuang dan letakkan di RAID 0. Perlu diingat jika volume RAID 0 gagal, SQL Server tidak akan dapat memulai.
Patrick Keisler
Saya memang telah membuat satu temp db per core seperti yang disarankan, tetapi terima kasih telah meningkatkan poin itu juga :)
DanP
1
Nah saran-saran ini tidak terlalu baik dan tidak sesuai untuk setiap lingkungan. Yang pertama disebutkan oleh @PatrickKeisler sebelumnya. Yang kedua adalah mitos yang dibantah Paul Randal beberapa waktu lalu. Artikel ini adalah ini: Mitos DBA SQL Server sehari: (12/30) tempdb harus selalu memiliki satu file data per inti prosesor . Jadi dokumentasi MS bisa salah, jangan menghafalnya.
Marian
2
"Karena TempDB hanya buffer data, Anda tidak dapat mengalami kehilangan data" ... dan saya yakin para pengguna sistem akan menghargai bahwa selama jam-jam downtime X yang mereka derita sementara a) ops menggali sekitar di ruang bawah tanah untuk disk pengganti atau b) DBA mencoba menjelaskan kepada helpdesk cara memindahkan tempdb, dari ponselnya.
Mark Storey-Smith