Saya mencari beberapa saran mengenai cara terbaik untuk mengatur disk / partisi saya untuk SQL Server. Berikut adalah beberapa kekhawatiran utama saya:
Bagaimana seharusnya file SQL dipisahkan (file data, log, temp)?
Apakah lebih baik RAID banyak HDD dan mempartisi ruang atau untuk membuat beberapa RAID dengan disk lebih sedikit untuk setiap RAID?
Haruskah data dan file log menggunakan jenis RAID yang berbeda?
Haruskah database default (master, msdb, dll ...) ditempatkan di C: atau haruskah mereka berada di tempat yang sama dengan file data / log lainnya?
sumber
Ini adalah pertanyaan 'tergantung' besar.
Saya tidak dapat menjawab cara membuat pertanyaan array RAID individual untuk Anda, karena saya bukan ahli penyimpanan, tetapi saya dapat membantu Anda dengan sisanya.
Hal pertama yang perlu Anda perhatikan adalah berapa beban kerja pada berbagai database - OLTP (baca / tulis) atau DSS / DW (baca-kebanyakan). Untuk beban kerja baca / tulis, Anda harus melihat RAID 1 atau RAID 10 (RAID 1 + 0), karena ini memberikan redundansi dan kinerja baca / tulis yang hebat. Untuk beban kerja baca-kebanyakan, Anda dapat menggunakan RAID 5. Alasan mengapa RAID 5 tidak boleh digunakan untuk beban kerja baca / tulis adalah karena Anda membayar penalti kinerja saat menulis.
Log transaksi, pada dasarnya bersifat baca / tulis (atau sebagian besar menulis, tergantung pada apakah Anda menggunakan log transaksi untuk apa pun - mis. Pencadangan atau replikasi log) sehingga tidak boleh diletakkan di RAID 5.
Ini berarti bahwa untuk beberapa database dan beban kerja, Anda mungkin memiliki file data pada RAID 5 dan mencatat file pada RAID 1/10, dan untuk database lain Anda mungkin memiliki semuanya pada RAID 1/10. Lebih jauh, jika Anda memiliki basis data yang dipartisi, itu mungkin berisi beberapa baca-sebagian dan beberapa baca / tulis data, bahkan mungkin dalam tabel yang sama. Ini dapat dipecah menjadi filegroup terpisah dan kemudian setiap filegroup memakai level RAID yang sesuai.
Pemisahan database yang sebenarnya lagi tergantung pada beban kerja, dan kemampuan subsistem IO yang mendasarinya - tingkat pemisahan yang lebih tinggi mungkin diperlukan untuk menyimpan hal-hal pada array RAID individu daripada pada SAN, misalnya.
Tempdb adalah kasus khusus sendiri, karena biasanya merupakan basis data yang banyak dan harus disimpan terpisah dari database lain. Basis data sistem tidak boleh banyak digunakan dan dapat ditempatkan di mana saja selama ada redundansi.
Berikut tautan ke whitepaper yang saya bantu tulis yang seharusnya membantu Anda: Desain Penyimpanan Database Fisik . Pastikan juga subsistem IO Anda dapat menangani beban kerja yang diantisipasi - lihat whitepaper ini: Praktik Terbaik I / O Predeployment . Akhirnya, pastikan bahwa Anda menggunakan ukuran garis RAID yang benar (biasanya 64K atau lebih tinggi pada sistem yang lebih baru), ukuran unit alokasi NTFS yang benar (biasanya 64K), dan pada sistem sebelum Windows Server 2008, Anda mengatur offset partisi disk dengan benar . Untuk info tentang ini, dan arahkan ke informasi lebih lanjut tentang mereka dan mengapa Anda harus mengonfigurasinya dengan cara ini, lihat posting blog ini: Apakah offset partisi disk Anda, ukuran garis RAID, dan unit alokasi NTFS diatur dengan benar? .
Garis bototm: mengetahui beban kerja Anda dan kemampuan subsistem IO Anda dan kemudian menerapkannya.
Saya harap ini dapat membantu anda.
PS Sejauh tempdb yang bersangkutan, itu adalah kaleng besar cacing tentang bagaimana Anda harus mengkonfigurasinya dan ada semua jenis informasi yang saling bertentangan. Saya menulis posting blog yang komprehensif tentang konfigurasi file data tempdb di Miskonsepsi sekitar TF 1118 .
sumber
Jawaban singkat untuk server yang saya atur selalu
Log pada disk fisik terpisah, raid 1 atau 10 (striping + mirroring)
Database pada disk sendiri, tergantung pada kebutuhan kinerja biasanya RAID5
Banyak cache pada pengontrol serangan
Lebih disukai menempelkan OS dan Windows Pagefile Anda pada array yang terpisah lagi, biasanya hanya mirror (Raid 1). Ini membuat semua operasi penulisan terpisah sehingga kinerja yang berat tidak menurunkan semuanya.
Apa yang saya alami di masa lalu adalah bahwa memiliki database menulis + log menulis + pagefile menulis akan merusak array Raid5 dan kinerja akan pergi ke heck di handbasket. Masalahnya adalah bahwa kinerja Anda akan baik-baik saja dalam pengujian, dev, dll. Tetapi ketika Anda masuk ke produksi dan penggunaan meroket, masalah ini akan muncul "tiba-tiba" dan keluhan pengguna meroket.
sumber
Ada jauh lebih baik orang MSSQL di sini daripada saya, tetapi secara umum saya menyarankan yang berikut;
OS dan kode pada C: - ini harus disk lokal, harus menjadi pasangan array RAID1 - kami menggunakan 2 x 2,5-inci SAS 146GB 10krpm disk untuk ini, tetapi Anda bisa menggunakan 2 x SATA 7,2 disk. Data harus pada array yang cukup cepat (10krpm atau lebih baik) RAID 1/10, 5/50/6/60 dari ukuran apa pun yang Anda butuhkan - kami memegang milik kami di FC SAN LUNs, biasanya pada grup disk 'tier 2' / 10krpm . Log harus berada pada pasangan array SANGAT CEPAT (15krpm) kecil (10GB atau kurang?) RAID 1 - kami memegang milik kami di FC SAN LUNs, biasanya pada grup disk 'tier1' / 15krpm yang sangat kecil atau pada 'tier0' / grup ssd.
Apa pun yang Anda inginkan masing-masing potongan ini pada spindle / array yang terpisah untuk kinerja - tentu saja semuanya akan bekerja dari satu disk tetapi saya kira Anda sedang mencari keseimbangan kinerja dan biaya.
Kami menyimpan master / tempdb kami dengan database reguler kami, tetapi Anda dapat memecahnya menjadi LUN array data yang terpisah.
Semoga ini membantu.
sumber