Saya tidak pernah bekerja dengan partisi SQL Server tapi saya saat ini dihadapkan dengan mendesain database yang mungkin membutuhkan volume. Sistem ini untuk kupon. Kupon akan diterbitkan secara berkala, biasanya setiap enam minggu meskipun akan ada juga penerbitan ad-hoc - misalnya untuk acara khusus. Ada 15 juta pelanggan dan untuk setiap acara penerbitan, setiap pelanggan akan menerima 6 jenis kupon yang berbeda, memberikan total 90 juta contoh kupon. Kami perlu melacak data penukaran instance kupon dan mempertahankannya selama 6 bulan, meskipun biasanya kupon hanya berlaku selama enam minggu. Setiap permintaan penukaran kupon yang tidak valid tidak akan mencapai basis data karena akan divalidasi oleh POS hingga.
Selama periode enam bulan kita perlu menyimpan hingga 360 juta baris di tabel Kupon Instance dan hingga 72 juta (dengan asumsi tingkat penukaran maks 20%) di tabel Penebusan. Saya merasa bahwa angka-angka ini terlalu besar untuk satu partisi?
Pertanyaan saya adalah - apa yang harus digunakan sebagai kunci partisi? Satu kandidat yang jelas akan dengan acara penerbitan, memberikan sekitar 6 partisi. Tetapi kemudian saya berpikir bahwa mungkin bahkan itu akan memberikan ukuran partisi yang terlalu besar untuk memungkinkan kinerja yang optimal? Apakah mungkin untuk mempartisi dengan dua kunci misalnya dengan acara penerbitan + digit terakhir dari id pelanggan? Jadi logikanya adalah:
If issuance event = 1 and last digit of customer id < 5 then
Store in partition 1
Else if issuance event = 1 and last digit of customer id >4 then
Store in partition 2
Else if issuance event =2 and last digit of customer id <5 then
Store in partition 3
Else if issuance event =2 and last digit of customer id >4 then
Store in partition 4
Etc...
Juga, saya tidak yakin dengan spesifikasi server database yang akan kami butuhkan. Apakah 16gb dan 8CPU cukup? Db harus dapat mengembalikan hasil dari tabel instance kupon, dikunci pada nilai barcode numerik dalam waktu kurang dari setengah detik. Permintaan transaksi yang diharapkan untuk divalidasi (pilih) dan tebus (masukkan) diperkirakan akan memuncak pada sekitar 3.500 per menit.
SQL Server 2008r2 64bit db server akan ditetapkan sebagai VM dari host yang sangat kuat dengan akses ke SAN kinerja tinggi dan kapasitas besar.
Saya akan sangat berterima kasih atas saran dari mereka yang telah menggunakan solusi SQL Server untuk mengelola volume yang sama.
Salam
Rampok.
sumber
Jawaban:
Pertanyaan spesifikasi server harus diarahkan ke Serverfault atau DBA.SE.
Untuk pertanyaan tentang partisi, saya rasa Anda tidak perlu melakukan partisi untuk ini.
Baris 360m banyak tetapi tidak terlalu sulit.
Apakah TIDAK dalam keadaan apa pun mencoba untuk partisi berdasarkan digit terakhir dari lapangan. Saya tidak yakin ini akan berhasil, tetapi itu bukan SARGable yang tidak akan dapat dipertahankan.
Jika Anda hanya perlu melakukan pencarian satu baris berdasarkan kunci numerik, partisi mungkin tidak akan membantu.
Jika Anda memutuskan untuk mengejar rute partisi, ingatlah untuk menjadi efektif semua pertanyaan Anda perlu menyertakan kunci partisi Anda sehingga mesin tahu partisi mana yang akan diperiksa. Kalau tidak, itu akan memeriksa semuanya dan Anda benar-benar merusak kinerja.
sumber
Anda BISA mempartisi pada beberapa kunci jika Anda menggunakan kolom yang tetap dihitung; seperti yang orang lain katakan, partisi tidak berfungsi untuk setiap situasi. Saya tidak yakin bahwa saya cukup memahami skenario Anda untuk memberikan saran spesifik, tetapi berikut adalah beberapa pedoman umum:
Partisi berguna dalam membaca data ketika kunci partisi adalah bagian dari pernyataan SQL, yang memungkinkan pengoptimal untuk memanggil pengecualian parisi. Anda harus yakin bahwa kunci yang Anda pilih berguna untuk sebagian besar permintaan.
Salah satu manfaat dari strategi partisi yang baik adalah untuk menua data; misalnya, jika kunci partisi Anda berbasis tanggal (yaitu, hari dalam setahun), dan Anda ingin menghapus semua data yang lebih tua dari tanggal tertentu, sangat mudah untuk MENGALIHKAN partisi tersebut ke tabel kosong dan potong.
sumber
Anda benar-benar perlu mendefinisikan persyaratan Anda sedikit lebih jelas. Anda menyebutkan bahwa Anda akan memiliki sekitar 360 juta baris dalam 6 bulan. Bagaimana dalam 2 tahun ke depan? Apakah Anda masih akan tumbuh hanya pada tingkat saat ini Anda sedang tumbuh. Atau ada kemungkinan Anda akan mengalami pertumbuhan eksponensial. Apakah Anda ingin menyimpan data di tabel ini selamanya; atau Anda ingin mengarsipkan data secara teratur.
Partisi dapat digunakan untuk pengarsipan data. Lihat skenario jendela geser. Lihat whitepaper ini dan ini .
Partisi juga dapat digunakan untuk mengelola fragmentasi indeks. Anda dapat membangun kembali / mengatur ulang partisi tertentu.
Anda juga harus mempertimbangkan tampilan yang dipartisi sebagai lawan dari tabel yang dipartisi. Tampilan yang dipartisi tidak memerlukan lisensi SQL Server Enterprise. Tampilan yang dipartisi juga memungkinkan Anda untuk melakukan pembangunan kembali indeks online pada "partisi" tertentu.
Partisi juga dapat dipertimbangkan ketika melakukan perencanaan pemulihan bencana Anda. Ini dapat digunakan untuk pemulihan database parsial. Sebagai contoh: Anda dapat membuat partisi lama Anda di filegroup yang berbeda dari partisi utama / saat ini. Dan kemudian ketika Anda memulihkan, Anda memulihkan filegroup utama, kemudian filegroup di mana partisi Anda saat ini berada dan kemudian yang terakhir Anda dapat mengembalikan filegroup di mana partisi lama berada. Ini dapat mengurangi jumlah waktu aplikasi Anda harus turun.
Lihat video hebat ini dari Kimberly Tripp tentang mempartisi .
sumber
Kecuali Anda melakukan partisi karena pengarsipan data lama, Anda melakukannya karena alasan yang salah dan tidak boleh melakukannya.
sumber