Bagaimana satu skala SQL Server 2008 atau 2012?

8

Bagaimana satu skala SQL Server 2008 (atau 2012)? Pada dasarnya, saya mengerti ada dua opsi:

Meningkatkan:

Jika CPU terikat, saya dapat dengan jelas melihat mulai dari 1 inti CPU ke 2 hingga 4. Atau jika penggunaan RAM meningkat, cukup tambahkan lebih banyak RAM. Apakah SQL Server 2008/2012 benar-benar mengambil slack dan meningkatkannya dengan asumsi TIDAK ada perubahan tingkat aplikasi? Untuk meminimalkan spekulasi, anggaplah saya tidak melakukan sesuatu yang bodoh seperti membakar siklus CPU, melakukan cross join, dll.

Skala keluar:

Tidak terlalu jelas bagaimana scaling out akan berhasil. Maksud saya jika saya menambahkan server SQL lain tepat di sebelah yang pertama, bagaimana kueri tahu server mana yang akan dijalankan? Apakah ada penyeimbang beban di depan (dan apakah itu datang dengan perangkat lunak SQL Server?)? Apakah itu memerlukan perubahan level aplikasi untuk meningkatkan kinerja? Atau apakah saya harus membuang data dan memiliki kode khusus yang memanggil server database yang benar tergantung pada kunci data pecahan?

Sangat menghargai masukan dari orang yang lebih berpengalaman.

DeepSpace101
sumber

Jawaban:

10

SQL Server tidak memiliki skala seperti itu . Ini meningkat.

Ada 3 area untuk melakukan ini, tergantung pada batasan edisi

  • Core CPU
  • RAM
  • Penyimpanan

Dan tentu saja, gunakan edisi yang lebih tinggi misalnya Perusahaan

SQL Server tidak shard dan solusi semacam itu (Anda dapat meneliti solusi MySQL sharding) menambah kompleksitas dan overhead ke suatu sistem.

Meningkatkan satu server (+ standby node / mirror) biasanya cukup mudah dengan RAM, SSD, lebih banyak volume disk untuk menyebarkan IO, drive terpisah untuk tempdb dan log dll

Juga, jika Anda menemukan SQL Server terikat CPU maka biasanya desain dan / atau indeks buruk dan / atau kueri yang ditulis dengan buruk kecuali Anda memiliki beban yang besar.

gbn
sumber
Bagus! Adakah literatur / tutorial / tautan khusus sharding MySQL yang Anda rekomendasikan? Semoga saya bisa menerapkan beberapa pola tersebut ke SQL Server. Saya belajar (cepat!) Dan Anda cukup punya sumber daya !!
DeepSpace101
1
Dan server musim dingin modern dapat meningkatkan hingga beberapa perangkat keras dengan spesifikasi cukup tinggi. Jika Anda harus mengukur lebih dari itu, Anda dengan nyaman masuk ke wilayah VLDB dan peralatan khusus yang mahal.
ConcernedOfTunbridgeWells
@ Id, Memindahkan SQL Server ke konfigurasi di mana satu database dibagi di beberapa server fisik bukanlah sesuatu yang bisa dicoba oleh pengguna baru. Hanya ada beberapa orang yang telah berhasil melakukannya karena sangat rumit dan membutuhkan skema yang SANGAT stabil dan pemahaman yang kuat tentang pola data dalam basis data (saya sudah mengajar kelas mengenai masalah ini). Ide dasar dari platform lain adalah tempat yang baik untuk memulai tetapi teknik sebenarnya yang digunakan sangat berbeda.
mrdenny
5

Seperti kata GBN, SQL tidak benar-benar berskala seperti yang dilakukan RDBM lainnya. Akan tetapi, ada satu aspek dalam menentukan skala yang diabaikan oleh banyak orang dan itu adalah untuk selalu memiliki sistem terpisah untuk tujuan pelaporan.

Jangan pernah izinkan laporan berjalan melawan produksi. Bangun sendiri basis data pelaporan di server lain.

Idealnya, sistem pelaporan Anda hanya akan berisi data yang dibutuhkan laporan, dan akan disusun dan dioptimalkan secara berbeda dari sistem produksi Anda.

Data akan dimasukkan ke dalam sistem pelaporan sesuai kebutuhan (yaitu pembaruan tetesan per jam dari produksi, pakan harian, dll.).

Pendekatan cepat dan kotor (dan sangat tidak efisien) adalah dengan hanya memiliki salinan lengkap dari database produksi di server lain. Salinan ini dapat disimpan melalui backup penuh, pengiriman log transaksi, mirroring (dengan foto), replikasi, dll.

Saya tidak merekomendasikan pendekatan ini. Cadangan penuh dan dipulihkan membutuhkan waktu, terutama pada basis data yang lebih besar. Replikasi rumit dan bermasalah. Pengiriman log memberi Anda basis data yang hanya bisa dibaca. Mencerminkan dengan snapshot mungkin merupakan jawaban yang baik, tetapi Anda masih terjebak dengan skema produksi yang tidak dioptimalkan untuk tujuan pelaporan.

Sistem pelaporan terpisah adalah caranya.

datagod
sumber
2

Jika CPU terikat, saya dapat dengan jelas melihat mulai dari 1 inti CPU ke 2 hingga 4. Atau jika penggunaan RAM meningkat, cukup tambahkan lebih banyak RAM. Apakah SQL Server 2008/2012 benar-benar mengambil slack dan meningkatkannya dengan asumsi TIDAK ada perubahan tingkat aplikasi?

Berbagai edisi SQL Server memiliki batasan yang berbeda dalam hal CPU dan memori yang akan mereka gunakan. Tetapi selain dari itu jawabannya adalah ya - jika siklus CPU kosong atau halaman memori tersedia, server biasanya akan menggunakannya ketika diperlukan, kecuali jika dikonfigurasi sebaliknya.

Atau apakah saya harus membuang data dan memiliki kode khusus yang memanggil server database yang benar

Pada dasarnya ya. "Scaling out" sering dilakukan ketika Anda harus menghindari pertengkaran kunci. Jika Anda memiliki kueri yang berjalan lama dengan penguncian yang luas, Anda mungkin ingin memisahkannya dari kueri interaktif "real-time" atau siklus pembaruan permintaan yang dimulai oleh pengguna yang mengoperasikan beberapa jenis antarmuka dan menunggu respons yang cepat. Jelas, menangani hal ini akan membutuhkan perubahan aplikasi (atau setidaknya perubahan middleware, jika Anda memiliki desain 3-tier).

syneticon-dj
sumber