Saya bagian dari perusahaan kecil sehingga seperti biasa mencakup sejumlah peran yang berbeda. Yang terbaru adalah pengadaan kotak SQL Server khusus untuk aplikasi web NET kami. Kami telah dikutip pada dual Xeon E5-2620 (enam inti) konfigurasi CPU 2,00 GHz (total 12 core), dengan 32 GB RAM. Ini membuat kami memiliki anggaran terbatas untuk array disk, yang pada dasarnya terdiri dari dua 2,5 "SAS 300 GB drive (15k RPM) dalam konfigurasi RAID 1.
Saya tahu bahwa pengaturan disk kurang optimal untuk SQL Server dan saya benar-benar ingin mendorong untuk RAID 10 sehingga kita dapat menempatkan database, file log dan tempdb pada drive mereka sendiri. Untuk membuat ini kompatibel dengan anggaran kami, haruskah saya mempertimbangkan mengurangi jumlah core CPU? atau apakah saya akan mendapatkan bank yang lebih baik untuk menjaga core dan menggunakan lebih sedikit drive, mungkin 4 dalam pengaturan RAID 1 ganda?
Berikut adalah beberapa statistik tambahan
Database SQL Server dimiringkan ke arah angka baca yang tinggi untuk ditulis, mungkin masing-masing 80% vs 20%. Ukuran DB saat ini adalah sekitar
10 GB26 GB saat ini, tumbuh pada tingkat 250 MB per bulan.Saat ini berjalan pada SQL Server 2008 R2 Standard pada kotak quad core Xeon tunggal yang dibagikan dengan web-server (Ram 12 GB, drive SAS 2 x 10k 300GB di RAID 1), ingin pindah ke SQL Server 2012 Standard.
Basis data melayani sekitar 100-150 pengguna bersamaan dengan beberapa tugas penjadwalan latar belakang dilemparkan
Saya mengerahkan seluruh aplikasi ke layanan cloud Azure (2 contoh kecil) yang ditautkan ke SQL Azure DB. Walaupun kinerjanya masuk akal saat pengujian (hampir nol beban) saya kehilangan keberanian untuk digunakan dalam produksi karena ketidakpastian yang saya baca banyak tentang. Ini mungkin bekerja lebih baik dengan pendekatan skala-out, tetapi hanya dengan database 10 GB saya mungkin bisa lolos dengan meningkatkan sekarang dan menghemat uang.
Saya awalnya mengabaikan biaya lisensi dan tidak menyadari bahwa lisensi SQL Server 2012 didasarkan pada jumlah core. Saya memiliki langganan BizSpark MSDN dengan lisensi SQL Server 2012 sehingga saya perlu membaca tentang berapa banyak core yang akan digunakan di luar kotak.
Jawaban:
Berbicara dari pengalaman yang sederhana tapi saya pikir layak untuk dibagikan, hambatan utama dengan database SQL (Sybase dan SQL server di sini) adalah penyimpanan.
Tapi saya pikir itu adil jika seseorang pertama-tama membuat tolok ukur pengaturan mereka sebelum membuat asumsi yang salah. Dalam kasus saya, penggunaan CPU tidak pernah naik cukup tinggi untuk membenarkan peningkatan CPU dalam waktu dekat. Sebagai gantinya, saya telah meningkatkan dari satu drive ke RAID 1 dan kemudian ke RAID 10+ per ton dari 8GB ke 16GB RAM.
Semua upgrade RAID ini membantu mengurangi waktu tunggu sebelumnya dengan faktor 2 hingga 6. Saya menduga upgrade ke SSD akan lebih baik. Jika Anda memikirkannya, semuanya dapat dikurangi menjadi bandwidth (teoritis). Kombo [(Kecepatan RAM + Ukuran RAM + Pengontrol memori) Anda ke CPU] memiliki batas bandwidth yang akan menjadi faktor paling penting dalam operasi baca ketika data Anda harus selalu di-cache, penyimpanan (RAID) khusus Anda memiliki batas bandwidth ( memengaruhi pembacaan saat cache tidak terjawab dan penulisan saat membilas atau dengan banyak klien menulis banyak data yang digabungkan).
Normalisasikan semua batas sebanyak mungkin (mendekatkan mereka sehingga Anda tidak menghabiskan sumber daya) dan menaikkannya sebanyak mungkin (tingkatkan jika diperlukan dan hanya jika diperlukan, jangan biarkan sumber daya terbuang sia-sia jika sistem menang ' t dapat menggunakannya karena beberapa hambatan lain menghalangi). Pada akhirnya, kemacetan terburuk Anda akan menjadi subsistem server yang paling berkinerja (dengan bandwidth paling sedikit) dalam konfigurasi khusus Anda.
Saya mungkin juga menambahkan bahwa, dalam proses peningkatan, saya telah membuat konfigurasi RAID terpisah untuk file database dan file log database. Alasannya adalah bahwa file log basis data cenderung menjadi intensif menulis. File log digunakan untuk memulihkan database dari kerusakan dan selalu ditulis untuk segera karena transaksi dilakukan sebelum data ditulis ke file database.
File log juga digunakan oleh beberapa server replikasi database tetapi kebanyakan replikasi tidak dilakukan secara instan tetapi sering sehingga dampak kinerja baca minimal di sini. Setidaknya saya pikir begitu. Saya telah melakukan benchmarking minimal sambil melakukan peningkatan ini lagi, saya sarankan siapa saja yang pertama kali melakukan tolok ukur konfigurasi yang berbeda dan terlebih dahulu meningkatkan penyimpanan mereka, kemudian RAM dan tautan jaringan, sebelum berpikir untuk meningkatkan CPU mereka.
Setelah peningkatan yang lebih luas pada lebih dari 5 server, saya kembali untuk berbagi pengalaman. Saya pasti masih menganjurkan untuk meningkatkan penyimpanan pertama, kemudian RAM dan kemudian CPU. Alasannya adalah perbedaan bandwidth dalam sistem antara penyimpanan, RAM dan CPU, dalam urutan terendah ke tertinggi. Jadi saya memutakhirkan banyak server dari RAID10 dan dual RAID1 ke SSD.
Cara saya melakukannya karena masalah biaya (saya memiliki 20 server untuk ditingkatkan) adalah memindahkan data database dan file objek ke SSD (ya, hanya satu SSD di RAID0) dan memindahkan log transaksi plus tempdb ke 4xHDD RAID10 konfigurasi. Saya menguji dengan tempdb pada SSD juga dengan hasil yang luar biasa (bahkan hasil yang sangat bagus dengan lebih dari 15 kali permintaan lebih cepat kadang-kadang, menghasilkan beberapa laporan mengambil detik daripada menit di masa lalu) tetapi kemudian memindahkan tempdb ke disk RAID10 karena masalah penulisan yang intensif untuk SSD.
Jadi sekarang pada dasarnya saya telah mengamati waktu respons 10-15 kali lebih cepat per beberapa pertanyaan terlama. SSD sangat bagus untuk membaca data ke dalam RAM dengan cepat karena SQL Server tidak membawa data ke dalam RAM sampai diminta untuk dan tentu saja data terlebih dahulu perlu dimuat ke dalam RAM untuk diproses oleh CPU (kemudian, dalam cache L1, L2, L3) , jadi SSD membantu mengurangi waktu tunggu awal dengan faktor besar. Dan SSD juga membantu mengurangi waktu swapping ... membersihkan RAM dan memuat data baru, terutama jika basis data Anda lebih besar dari yang bisa masuk ke dalam RAM.
Semua dalam semua, kami sangat senang dan telah berjalan seperti itu selama beberapa bulan dalam semacam proses migrasi yang lambat untuk memungkinkan server berjalan sehingga saya dapat mengumpulkan informasi tingkat keausan sebelum saya mengalihkan semua server saya ke konfigurasi ini. Dan ini hanya SQL Server Express! : D - Pastikan SSD Anda dapat memberikan IOPS konstan karena itu hal lain yang membuat perbedaan besar (hanya google saja). Itu sebabnya saya memilih Intel DC (DataCenter) seri SSD.
sumber
Mungkin bukan jawaban yang mungkin Anda cari di bagian pertama, tetapi: sudahkah Anda mempertimbangkan untuk mendorongnya ke cloud? AWS dapat memungkinkan Anda untuk memenuhi sebagian besar kebutuhan di atas dan memperpanjang daya beli Anda tanpa harus berurusan dengan perangkat keras juga.
Bagian kedua - Perangkat keras sangat tergantung pada tugas. Saya cenderung condong ke lebih banyak CPU ketika saya dapat melakukan integrasi CLR kustom, karena dengan begitu saya dapat mengoptimalkan untuk solusi yang benar-benar paralel untuk masalah. Sebagian besar waktu meskipun jika lebih baik untuk menetapkan solusi berbasis saya menemukan bahwa RAM dan kecepatan harddisk adalah hambatan terbesar, dan yang kedua tampaknya menjadi masalah Anda. (Di mana ide SSD di atas akan sangat membantu)
Tanpa statistik nyata dari server Anda, saya akan menyarankan Anda melihat beberapa solusi caching untuk menurunkan penulisan, (kecuali jika Anda melakukan semacam pencatatan dengan penulisan, atau hal-hal yang memerlukan sejarah) dan menempatkan lebih banyak uang ke hard drive Anda dari CPU. SQL server cukup bagus untuk berjalan paralel pada query (jika mereka ditulis untuk itu) tetapi jika Anda berat menulis, maka hard drive Anda adalah hambatan yang nyata.
sumber