Orang-orang terus mengatakan kepada saya bahwa untuk meningkatkan kinerja SQL server, beli hard disk tercepat yang mungkin dengan RAID 5, dll.
Jadi saya berpikir, daripada menghabiskan semua uang untuk RAID 5 dan super-duper hard disk cepat (yang tidak murah,), mengapa tidak hanya mendapatkan ton RAM? Kita tahu bahwa server SQL memuat basis data ke dalam memori. Memori lebih cepat daripada hard disk mana pun.
Mengapa tidak memasukkan 100 GB RAM di server? Kemudian gunakan saja hard disk SCSI biasa dengan RAID 1. Bukankah itu jauh lebih murah dan lebih cepat?
performance
raid
sql
memory
hard-drive
pengguna1034912
sumber
sumber
Jawaban:
Analisis Anda baik-baik saja - sampai titik tertentu - karena hal itu benar-benar akan membuat segalanya lebih cepat. Anda masih harus menjelaskan beberapa masalah lain:
Tidak semua orang mampu membeli cukup memori; ketika Anda memiliki beberapa terabyte data, Anda harus meletakkannya di disk beberapa saat. Jika Anda tidak memiliki banyak data, semuanya cepat.
Kinerja penulisan untuk basis data Anda masih akan dibatasi oleh disk, sehingga Anda dapat menepati janji bahwa data sebenarnya disimpan.
Jika Anda memiliki kumpulan data kecil, atau tidak perlu bertahan di disk, tidak ada yang salah dengan ide Anda. Alat-alat seperti VoltDB bekerja untuk mengurangi overhead yang asumsi lama dalam implementasi RDBMS dibuat yang membatasi kinerja murni dalam memori.
(Selain itu, orang yang mengatakan kepada Anda untuk menggunakan RAID-5 untuk kinerja database mungkin bukan orang-orang hebat untuk mendengarkan subjek, karena ini hampir tidak pernah menjadi pilihan terbaik - ia memiliki kinerja membaca yang baik, tetapi kinerja penulisan yang buruk, dan menulis hampir selalu menjadi kendala produksi - karena Anda dapat memasukkan RAM ke dalam caching untuk menyelesaikan sebagian besar masalah kinerja sisi-baca.)
sumber
Versi singkat: pertimbangkan ukuran set yang berfungsi. Versi panjang: Seberapa besar data Anda? Jika itu bisa masuk ke memori server modern, ya, Anda memang benar. Sayangnya, Xeon terbesar dapat mengatasi 2TB RAM saat ini, dan itu bukan data yang besar lagi. Jika Anda tidak dapat membeli mesin yang cukup besar untuk menampung seluruh perangkat kerja Anda dalam RAM, Anda terpaksa menyelesaikan masalah dengan otak Anda, bukan dompet Anda.
sumber
Jika Anda ingin kecepatan:
Ikuti langkah-langkah itu, dan SQL Server akan terbang.
Kemudian jika Anda mau, tambahkan lebih banyak RAM ... tetapi lakukan hal di atas terlebih dahulu, dan Anda mungkin sudah selesai.
sumber
Dalam http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids . Perhatikan itu enam tahun lalu. Ya, kami memiliki sistem basis data yang mencoba (dan berusaha keras) untuk menyimpan seluruh dataset dalam RAM dan lebih baik membuangnya ke beberapa mesin daripada menggunakan disk karena disk lebih lambat. Anda perlu menulis dataset ke disk tetapi seperti dalam moto di atas, itu lebih mirip dengan tugas cadangan latar belakang daripada operasi online. Daya tahan dicapai melalui hanya menambahkan log dengan database ini (saya berpikir MongoDB dan Redis tetapi ada banyak lagi).
sumber
Pertanyaan ini mirip dengan yang mendasar yang telah menyebabkan banyak penelitian dan pengembangan dalam arsitektur basis data selama 5-10 tahun terakhir. Sekarang karena layak untuk menyimpan seluruh basis data dalam RAM untuk banyak kasus penggunaan, basis data perlu dirancang untuk bekerja di dalam RAM, daripada hanya menerapkan arsitektur lama yang diwariskan ke penyimpanan berbasis RAM.
Sama seperti banyak bahasa yang lebih kecil dan lebih banyak tujuan khusus telah diadopsi secara luas dalam beberapa tahun terakhir, kami memasuki era lebih banyak database tujuan khusus akan diperlukan.
Untuk bacaan lebih lanjut tentang topik ini, saya merekomendasikan makalah akademis Akhir dari Era Arsitektur (Saatnya Menulis Ulang Lengkap) . Itu tidak sulit dibaca.
Tidak jelas apakah pertanyaan ini khusus tentang SQL Server. Poster asli harus menjelaskan ini.
Daniel Pittman menulis:
Mengurangi overhead dari asumsi lama dalam implementasi RDBMS adalah persis tujuan desain dari VoltDB , tetapi melakukan skala secara horizontal tanpa batas arsitektur pada ukuran data, dan dapat bertahan ke disk untuk daya tahan penuh menggunakan snapshotting dan command-logging.
sumber
Jika Anda bisa mendapatkan server dengan RAM yang cukup untuk menampung, setidaknya, bagian panas dari dataset Anda, Anda akan baik-baik saja. Juga, RAID 1 dan 5 bukan cara tercepat untuk mengatur data Anda - RAID 0 lebih cepat, tetapi, kemudian, Anda harus mempertimbangkan kemungkinan lebih tinggi dari kegagalan sistem file yang menghapus database Anda - bukan hal yang baik untuk terjadi . Anda dapat RAID 1 atau RAID 5 array RAID 0 Anda, asalkan Anda memiliki cukup drive dan pengontrol.
Anda bahkan dapat bermain dengan replikasi di sini - lakukan penulisan Anda ke server disk-berat yang mereplikasi ke satu atau lebih server memori-berat tempat Anda menjalankan kueri yang rumit.
Sayangnya, RDBMS tampaknya berada di ranah besar - mereka tidak mudah tumbuh secara horizontal.
sumber
Ini adalah kasus "itu tergantung apa yang Anda lakukan." Mungkin saran "benar" adalah untuk menghindari SQL sama sekali dan menggunakan memcache / redis / etc!
Saya setuju dengan Anda bahwa RAM ekstra akan banyak membantu, terutama jika Anda dapat membaca seluruh set kerja ke dalam RAM. Ya itu masih harus menulis data, tetapi jika Anda memiliki sebagian besar membaca maka penulisan tidak akan memiliki perselisihan untuk disk I / O.
Namun kinerja disk sering menjadi hambatan pada server SQL dan lebih sulit daripada hal-hal lain seperti RAM untuk ditingkatkan nanti (jika Anda memiliki server yang tidak sepenuhnya diisi dengan DIMM).
Ada sejumlah komentar tentang RAID5 yang lambat, tapi saya akan mengatakan ini tidak selalu terjadi, jadi berhati-hatilah sebelum membuat pernyataan. Server yang benar-benar canggih dengan kartu RAID yang cepat dan banyak BBWC terkadang berjalan jauh lebih cepat di RAID5 (atau RAID50 dengan> 4 disk) daripada di RAID10 ...
Selama bertahun-tahun saya secara pribadi mengalami susunan RAID5 yang lambat, tetapi setelah melakukan pembandingan DL360 G5 dengan 4 cakram SAS 146G pada ~ 2009, kami harus memeriksa ulang pengujian kami. Memang, array berjalan lebih cepat dengan RAID5 daripada RAID10 di hampir setiap pengujian. BBWC dan perhitungan paritas cepat memungkinkan server dapat menggunakan 4 disk jauh lebih efektif sebagai array RAID5 daripada RAID10. Beberapa tes menunjukkan throughput 50% lebih baik dengan RAID5, dan hampir tidak ada yang lebih lambat. Tes yang lebih lambat hanya mendapat potongan 5-10%.
Saya akan memperingatkan orang-orang yang membuat pernyataan selimut bahwa RAID5 lambat, semua orang mengatakannya secara online, tetapi itu tidak benar dalam setiap kasus.
sumber
Anda memiliki campuran kantong permen untuk dipilih dan sangat tergantung pada apa rasa yang Anda inginkan.
Sederhananya berinvestasi dalam pengetahuan (gratis) sebelum membagikan uang tunai. 1. Pelajari konfigurasi untuk database Anda dan lihat konfigurasi Anda saat ini untuk mengoptimalkan. 2. Lihatlah pernyataan pemrograman dan sql, tes unit dengan skrip sederhana yang meniru operasi yang terlibat, bahkan mungkin bukan apa yang Anda pikirkan adalah masalahnya. JIKA skrip sederhana membutuhkan waktu menggunakan SQL Joins, bagilah dan lakukan hal yang sama dengan loop terprogram untuk melakukan hal yang sama. Ini adalah memori yang dapat membantu 3. Lihatlah paket hosting dan server. Gunakan ps aux di konsol linux dan lihat apakah ada sesuatu yang menyedot memori dan prosesor Anda.
Hard Drive absolut meningkatkan kecepatan tetapi tidak terserah Anda di ruang server virtual. Memori tidak meningkatkan kecepatan kecuali jika Anda mengkonfigurasi layanan untuk itu, titik. RAID Striped (0,5), RPM dan Synchronous Read / Write dengan bus cepat membantu itu. Prosesor inti dengan cache l1, l2, l3 yang baik akan membantu memproses bottleneck. dapatkah saya mendengarnya untuk Xeon!
sumber
Secara keseluruhan, Anda harus mengingat ukuran dan skalabilitas. Meskipun Anda mungkin mulai dengan kebutuhan penyimpanan kecil, data Anda akan tumbuh dengan sangat cepat dan eksponensial. DB paling baik menggunakan data atom, yaitu data yang dipecah menjadi ukuran sekecil mungkin. Karena ukurannya yang kecil, ia bergerak lebih cepat di dalam gudang data. Kemudian, Anda juga memperhitungkan struktur DB. Di masa depan, Anda bisa menghubungkan ke luar DB, itulah sebabnya struktur juga penting. Dalam skenario ini, itu akan membuat sedikit perbedaan untuk permintaan Anda jika setengah dari data tinggal di luar mart data Anda. Ketika data ditanyai, intinya bukan menyimpan data yang tersimpan di RAM; melainkan, kueri harus cepat dalam mengakses dan mengembalikan data.
sumber