Yah saya mungkin tidak mengerti, tetapi saya mencoba menjawabnya.
Anda bilang Anda membutuhkan solusi kinerja tinggi yang sering berjalan (minimal semua 2 menit) dan Anda membutuhkan pendekatan yang baik yang harus cepat tanpa mengunci. Tetapi Anda tidak ingin sistem blackbox.
Alih-alih sistem blackbox, yang digunakan pada jutaan instalasi dengan hasil yang baik, Anda mencoba untuk menemukan roda lagi dan membangun solusi Anda sendiri? Hm, terdengar agak aneh.
Sebenarnya ini adalah saran saya.
- Replikasi bahkan jika Anda mengatakan Anda tidak akan menggunakannya. Ini adalah solusi termudah dan terbaik yang dapat Anda gunakan untuk ini. Replikasi itu mudah diatur, direplikasi dengan cepat dan Anda tidak perlu menemukan roda lagi. Jika Anda hanya aneh tentang penguncian, Anda dapat mencoba untuk mengatur
ISOLATION LEVEL
ke READ_COMMITTED_SNAPSHOT
. Anda dapat membaca lebih lanjut di sini . Ini akan menghabiskan sebagian dari tempdb Anda, tetapi tabel Anda selalu dapat dibaca dan ditulisi dan replikasi dapat bekerja di latar belakang.
Lihat contoh di bawah ini:
ALTER DATABASE yourDatabase SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE yourDatabase SET READ_COMMITTED_SNAPSHOT ON
- CDC (Ubah Data Capture) juga bisa menjadi solusi. Tetapi dengan cara ini Anda perlu membangun hampir semuanya sendiri. Dan saya telah membuat pengalaman yang
CDC
bisa menjadi hal yang rapuh dalam beberapa keadaan. CDC
akan menangkap semua data pada tabel yang ditonton (Anda perlu menentukan setiap tabel yang ditonton secara manual). Setelah itu Anda akan mendapatkan nilai sebelum dan nilai setelah INSERT
, UPDATE
atau DELETE
. CDC
akan menahan informasi tersebut untuk jangka waktu tertentu (Anda dapat menentukannya sendiri). Pendekatannya dapat digunakan CDC
pada tabel tertentu yang perlu Anda perhatikan dan secara manual mereplikasi perubahan tersebut ke database lain. Omong-omong, CDC
gunakan Replikasi Server SQL di bawah tenda juga. ;-) Anda dapat membaca lebih lanjut di sini .
Peringatan: CDC
tidak akan mengetahui DDL
perubahan. Ini berarti, jika Anda mengubah tabel dan menambahkan kolom baru, CDC
akan menonton tabel tetapi mengabaikan semua perubahan pada kolom baru. Bahkan hanya mencatat NULL
sebagai nilai sebelum dan setelah nilai. Anda perlu menginisialisasi ulang setelah DDL
-Perubahan ke tabel yang ditonton.
- Cara Anda dijelaskan di atas adalah seperti menangkap beban kerja menggunakan SQL Server Profiler dan menjalankannya lagi di database lain untuk beberapa tolok ukur. Yah itu bisa berhasil. Tetapi kenyataan bahwa ada terlalu banyak efek samping agak terlalu berat bagi saya. Apa yang Anda lakukan jika Anda menangkap panggilan prosedur pada klien Anda. Setelah itu jalankan perintah yang sama di basis data prinsip Anda karena tidak sinkron? Prosedur dapat berjalan melalui, tetapi mungkin menghapus / memperbarui / memasukkan baris yang tidak ada di klien Anda. Atau bagaimana Anda menangani banyak klien dengan satu prinsip. Saya pikir ini terlalu rumit. Dalam kasus terburuk, Anda mungkin menghancurkan integritas Anda.
- Gagasan lain bisa berbasis aplikasi atau menggunakan pemicu. Tergantung pada berapa banyak tabel yang ingin Anda selaraskan. Anda dapat menulis semua perubahan ke tabel pementasan terpisah dan menjalankan Pekerjaan Server SQL Server semua x Menit untuk menyinkronkan baris-baris dalam tabel pementasan dengan master Anda. Tetapi ini mungkin agak berat jika Anda mencoba menyinkronkan (misalnya) 150 tabel. Anda akan memiliki overhead yang besar.
Nah ini 2 sen saya. Semoga Anda memiliki gambaran umum yang baik dan mungkin Anda menemukan satu solusi yang cocok untuk Anda.