Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Internal Replikasi Transaksional SQL Server – Bagian 2

Replikasi Transaksional SQL Server adalah salah satu teknik replikasi yang paling umum digunakan untuk menyalin atau mendistribusikan data ke berbagai tujuan. Pada artikel sebelumnya, kita telah membahas Replikasi SQL Server, Jenis Replikasi, dan Internal Dasar tentang cara kerja Replikasi Transaksional. Sekarang, kita akan masuk ke Internal Lanjutan tentang cara kerja Replikasi Transaksional SQL Server.

Arsitektur Replikasi Transaksional

Sebelum kita mulai, saya sarankan Anda untuk menyegarkan kembali pengetahuan Anda dengan artikel saya sebelumnya di sini.

Mari kita mulai dengan melihat Arsitektur Replikasi Transaksional SQL Server yang ditunjukkan di bawah ini dari dokumentasi Microsoft.

Di Database Penerbit , buat Publikasi terdiri dari daftar Artikel (Tabel , Tampilan , dll.,) yang perlu Anda tiru ke Pelanggan basis data. Setelah Artikel diaktifkan untuk Replikasi, setiap perubahan yang terjadi pada artikel ini akan ditandai untuk Replikasi di basis data Log Transaksi Penerbit.

Replikasi Transaksional SQL Server dapat diinisialisasi dari Publisher ke Distributor lalu ke Pelanggan database melalui Agen Snapshot atau Penuh Cadangan . Agen Snapshot dapat melakukan Inisialisasi melalui Wizard Konfigurasi Replikasi . Pencadangan Penuh hanya didukung melalui pernyataan T-SQL.

Agen Pembaca Log memindai Log Transaksi dari database Publisher untuk mendeteksi perubahan terlacak yang ditandai untuk Replikasi. Itu mengabaikan perubahan lain yang ditangkap di Log Transaksional dan menyalin perubahan data dari Log Transaksi ke database Distribusi.

Database Distribusi bisa di Publisher atau Subscriber, atau bisa di contoh SQL Server independen lainnya. Perhatikan hal-hal berikut:

  • Agen Pembaca Log berjalan terus menerus dari Server Distributor untuk memindai perintah baru yang ditandai untuk replikasi. Namun, jika Anda tidak ingin terus berjalan dan ingin berjalan sesuai jadwal, kami dapat mengubah Pekerjaan SQL Agen Pembaca Log yang akan dibuat.
  • Agen Pembaca Log mengambil semua catatan yang ditandai untuk replikasi dari kumpulan Log Masuk Transaksional dan mengirimkannya ke database Distribusi.
  • Agen Pembaca Log hanya mengambil transaksi yang Dikomit dari Log Transaksional Basis Data Penerbit. Jadi, setiap kueri yang berjalan lama di database Publisher dapat secara langsung memengaruhi Replikasi saat menunggu transaksi aktif selesai.

Agen Distribusi mengambil semua perintah baru yang tidak terdistribusi dari database Distribusi dan menerapkannya ke database Langganan baik melalui Push atau Tarik Mekanisme .

  • Langganan DorongDistributor mengambil kepemilikan untuk menerapkan perubahan dari database Distribusi ke Pelanggan.
  • Tarik Langganan – Pelanggan database mengambil alih kepemilikan untuk mengambil perubahan dari database Distribusi ke Pelanggan.

Setelah rekaman berhasil didistribusikan dari Distribusi ke database Pelanggan, rekaman tersebut akan ditandai sebagai Didistribusikan dan juga ditandai untuk penghapusan dari database Distribusi .

Salah satu tugas Pemeliharaan Replikasi Utama adalah Pembersihan Distribusi :Pekerjaan Distribusi berjalan setiap 10 menit untuk menghapus catatan terdistribusi dari database Distribusi untuk mempertahankan ukuran database Distribusi di bawah kendali.

Oleh karena itu, tujuan kami untuk artikel saat ini adalah untuk mengeksplorasi topik-topik berikut:

  • Database Distribusi
  • Agen Replikasi
    • Agen Snapshot
    • Agen Pembaca Log
    • Agen Distribusi
  • Profil Agen Replikasi
  • Pekerjaan Pemeliharaan Replikasi
  • Latensi Replikasi dan Token Pelacak
  • Utilitas TableDiff
  • Peringatan Agen SQL Server

Database Distribusi SQL Server

Basis data distribusi adalah database sistem yang dibuat saat mengonfigurasi Replikasi. Ini adalah inti dari Replikasi karena sebagian besar proses kehabisan database distribusi.

Karena sifat basis data distribusi, kami hanya dapat melakukan operasi terbatas di atasnya, seperti Pencadangan dan Pemulihan. Kami tidak dapat menjatuhkannya secara langsung seperti database Pengguna.

Untuk database besar dengan banyak data yang direplikasi, kita perlu mengambil beberapa langkah khusus untuk meningkatkan kinerja throughput Replikasi:

Secara default, database distribusi dibuat di jalur penginstalan default yang dikonfigurasi di SQL Server . Jika tidak dikonfigurasi, itu akan dibuat di C : drive atau di folder Instalasi SQL Server. Kami menyarankan Anda untuk memindahkan database distribusi ke penyimpanan/disk yang lebih cepat untuk meningkatkan kinerja.

Ukuran File Awal dan Pertumbuhan Otomatis dari database distribusi akan diatur sesuai dengan pengaturan Ukuran File Awal dan Pertumbuhan Otomatis model database. Konfigurasikan ukuran File Awal ke nilai yang lebih baik seperti 10GB jika terjadi replikasi database yang sibuk secara transaksi. Properti pertumbuhan otomatis harus hingga 512 MB atau 1 GB untuk file Data dan Log. Kemudian, tidak akan ada banyak fragmentasi pada File Data dan Log.

Konfigurasikan Harian atau Pekerjaan Pencadangan Rutin untuk menyertakan database distribusi untuk tujuan referensi atau pemecahan masalah jika terjadi kerusakan atau kehilangan data.

Konfigurasikan Pengaturan Ulang Indeks Harian atau Pemeliharaan pekerjaan untuk memasukkan database distribusi. Basis data melibatkan penyisipan data yang sangat besar ke dalam MSrepl_transactions dan MSrepl_commands tabel.

Catatan:Polling berkelanjutan pada 2 tabel ini dan HAPUS dari mereka setelah berhasil mengirim data ke database Pelanggan meningkatkan risiko fragmentasi. Membangun kembali tabel-tabel ini secara terjadwal dapat meningkatkan kinerja database distribusi.

Untuk melihat dan mengubah atribut basis data Distribusi yang terkait dengan Replikasi, klik kanan Replikasi > Properti Distributor :

Klik pada elipsis tombol di sebelah kanan untuk melihat detail selengkapnya tentang opsi individual yang tercantum.

Perhatikan, mengubah parameter apa pun dapat memengaruhi kinerja basis data distribusi. Oleh karena itu, terapkan perubahan hanya setelah Anda mengevaluasi dengan cermat semua parameter yang ingin Anda ubah.

Retensi Transaksi menentukan berapa banyak data yang harus disimpan dalam database distribusi. Nilai minimum dan maksimum dapat ditentukan dalam jam atau hari.

Nilai Retensi Transaksi yang ditetapkan sebagai 0 jam menunjukkan bahwa setelah catatan berhasil direplikasi ke database Pelanggan, catatan tersebut dapat dihapus dari database distribusi. Jika Anda meningkatkan nilai ini, ukuran database distribusi akan meningkat. Jadi, kita perlu merencanakannya dengan tepat.

Retensi Riwayat menentukan periode retensi untuk menyimpan data Riwayat Kinerja Replikasi Transaksional. Secara default, ini adalah 48 Jam.

Untuk menjatuhkan database distribusi , kita perlu Menonaktifkan Publikasi terkait dengan database distribusi tertentu dan kemudian drop menggunakan salah satu dari dua metode. Salah satunya adalah kombinasi dari Nonaktifkan Penerbitan dan panduan Distribusi. Satu lagi menggunakan sp_dropdistributor atau sp_dropdistributiondb Prosedur. Wizard secara internal menggunakan 2 prosedur ini untuk menonaktifkan Distribusi dan menghapus basis data distribusi.

Agen Replikasi SQL Server

Agen replikasi adalah program mandiri yang bertanggung jawab untuk melacak perubahan data dari Penerbit dan menyebarkan perubahan tersebut ke database Distributor dan Pelanggan. Mereka dieksekusi sebagai pekerjaan Agen Server SQL.

Pertama, mari kita lihat lokasi program mandiri ini.

Untuk mengkonfigurasi Replikasi, kita perlu memiliki komponen Replikasi diinstal melalui penginstal SQL Server. Setelah selesai, kita dapat melihat program mandiri terkait agen Replikasi yang tersedia di jalur instalasi:

C:\Program Files\Microsoft SQL Server\130\COM

Dalam kasus saya, versi versi SQL Server adalah 2016. Oleh karena itu, jalurnya di bawah 130.

Untuk setiap Agen Replikasi, kita dapat melihat masing-masing program mandiri yang tersedia:

  • DISTRIB.exe – Agen Distribusi
  • Logread.exe – Agen Pembaca Log
  • Qrdrsvc.exe – Agen Layanan Pembaca Antrian
  • Replmerg.exe – Menggabungkan Agen Replikasi
  • Snapshot.exe – Agen Snapshot
  • Tablediff.exe – Utilitas untuk Membandingkan Tabel. Kita bisa mendapatkan detail lebih lanjut nanti di artikel ini.

Sekarang setelah kita mengetahui apa tanggung jawab program mandiri ini dan di mana lokasinya, kita dapat memahami bagaimana program tersebut dijalankan melalui Pekerjaan Agen Server SQL.

Karena kita berurusan dengan Replikasi Transaksional SQL Server, kita akan melalui pekerjaan Agen Snapshot, Agen Pembaca Log, dan Agen Distribusi (logika yang sama berlaku untuk semua agen lainnya).

Agen Snapshot

Agen Snapshot berjalan dari Server yang memegang database distribusi. Ini menyiapkan Skema dan data awal dari semua Artikel yang disertakan dalam Publikasi di Penerbit, membuat file Snapshot di folder snapshot, dan mencatat detail Sinkronisasi dalam database Distribusi.

Dari distribusi MSSnapshot_agents tabel, kita dapat mengidentifikasi Pekerjaan Agen SQL Server yang melakukan aktivitas Agen Snapshot. Setiap Publikasi melibatkan pekerjaan Agen Server SQL khusus yang harus menangani Tanggung Jawab Agen Snapshot.

Perluas Agen SQL Server dan buka nama pekerjaan yang disebutkan di atas. Ini akan menampilkan detail dan Kategori nama – REPL-Snapshot

Klik Langkah untuk melihat aktivitas yang dilakukan oleh agen Snapshot.

Klik beberapa langkah individu untuk melihat info tentang pekerjaan agen Snapshot.

Langkah 1 mencatat entri ke tabel riwayat setiap kali agen Snapshot memulai dengan menggunakan sp_MSadd_snapshot_history prosedur.

Tabel yang menyimpan riwayat detail yang dijalankan oleh agen Snapshot adalah MSsnapshot_history tabel dalam database distribusi.

Ini akan cocok dengan Lihat Status Agen Snapshot jendela dialog.

Pindah ke Langkah 2Jalankan Agen . Ini akan memulai pekerjaan Agen Snapshot .

Di bawah Perintah , kami tidak dapat menemukan pernyataan atau kueri T-SQL. Hanya ada beberapa parameter yang terdaftar. Jadi, jawabannya terletak pada bagian yang disorot pada ilustrasi di atas. Ini menunjukkan bahwa Langkah Pekerjaan Ketik adalah Snapshot Replikasi yang meluncurkan program mandiri snapshot.exe untuk melakukan tanggung jawab Agen Snapshot.

Untuk detail selengkapnya tentang snapshot.exe, lihat artikel MSDN ini. Kami juga akan membahas detailnya saat memecahkan masalah terkait Replikasi nanti.

Terakhir, kita akan Langkah 3 – Langkah Pekerjaan terakhir. Ini menangkap setiap penghentian tak terduga dari Pekerjaan Agen dan mengeluarkannya.

Agen Pembaca Log

Setiap kali Publikasi dikonfigurasi pada database, setiap perubahan yang terjadi pada Artikel tersebut akan ditandai untuk Replikasi di Log Transaksi. Agen Pembaca Log membaca perubahan data tersebut melalui logread.exe dan menyimpannya ke Database Distribusi melalui 2 proses terpisah:

  • Baca Log Transaksi – ia menggunakan sp_replcmds prosedur tersimpan yang diperluas untuk memindai perubahan data dari Penerbit. Karena prosedur tersimpan ini merujuk file DLL, internal tentang bagaimana tepatnya Microsoft membaca file log tidak diidentifikasi. Namun, kita dapat mencoba fungsi tidak berdokumen seperti fn_dblog() dan fn_dump_dblog() untuk memahami cara kerja file Log Transaksi.
  • Tulis ke Basis Data Distribusi – ia menggunakan sp_MSadd_replcmds prosedur tersimpan dalam database distribusi untuk menulis data biner yang dibaca dari Log Transaksi dari database Publisher. Ia menulis detail transaksi ke MSrepl_transactions tabel dan perintah individual ke MSrepl_commands tabel.

Hanya satu pekerjaan Agen Server SQL Pembaca Log yang tersedia untuk setiap database yang Diterbitkan. Anda dapat mengidentifikasi namanya seperti yang ditunjukkan di bawah ini:

Perluas Agen SQL Server dan buka pekerjaan Agen Pembaca Log di atas untuk melihat langkah-langkahnya. Ini akan menampilkan Сkategori job pekerjaan di bawah Pembaca Log Replikasi.

Klik Langkah untuk melihat langkah-langkah individual yang dilakukan oleh Agen Pembaca Log. Seperti tugas Agen Snapshot, kita dapat melihat 3 langkah yang setara untuk tugas Agen Pembaca Log.

Langkah 1 memanggil sp_MSadd_logreader_history prosedur untuk mencatat pesan riwayat status Startup dari Agen Pembaca Log ke MSlogreader_history tabel.

Langkah 2 memulai proses Agen Pembaca Log menggunakan program mandiri logread.exe .

Anda dapat menemukan detail lebih lanjut tentang logread.exe di artikel MSDN masing-masing. Nanti, kami juga akan memeriksa parameter konfigurasi penting dari Agen Pembaca Log.

Langkah 3 menangkap penghentian mendadak pekerjaan Agen Pembaca Log.

Agen Distribusi

Agen Distribusi (DISTRIB.exe) digunakan oleh Replikasi Transaksional dan Snapshot untuk menerapkan file Snapshot awal dan inkremental atau menerapkan transaksi tertunda yang tersedia dari database Distribusi ke database Pelanggan.

Agen ini berjalan dari Server Distributor untuk Langganan Push dan Server Pelanggan untuk Langganan Pull. Untuk menemukan nama Pekerjaan Agen Server SQL yang melakukan tanggung jawab agen Distribusi, kita dapat menjalankan kueri spesifik seperti yang ditunjukkan di bawah ini:

Perluas pekerjaan Agen Server SQL dan buka untuk melihat informasi lebih lanjut dan kategori yang ditetapkan ke Distribusi Replikasi.

Klik Langkah – Anda akan melihat langkah-langkah yang serupa dengan langkah-langkah pekerjaan Snapshot dan Agen Pembaca Log yang sebelumnya terbuka.

Langkah 1 memanggil sp_MSadd_distribution_history prosedur untuk mencatat pesan riwayat status Startup dari Agen Pembaca Log ke MSdistribution_history tabel.

Langkah 2 memulai proses Agen Distribusi (DISTRIB.exe) dengan parameter default.

Untuk detail selengkapnya tentang DISTRIB.exe, buka artikel MSDN. Selanjutnya, kita akan membahas parameter konfigurasi kritis dari agen Distribusi di artikel berikutnya.

Langkah 3 menangkap detail tentang penghentian mendadak pekerjaan Agen Distribusi.

Profil Agen Replikasi

Dari Properti Distributor , kita bisa mendapatkan opsi untuk melihat Profil Agen Replikasi . Biarkan Profil Agen ke nilai default dan ubah hanya jika diperlukan untuk tujuan pemecahan masalah.

Klik Default Profil untuk melihat nilai default yang dikonfigurasi untuk semua Agen Replikasi yang tersedia di Server.

Pilih Agen Distribusi bagian dan klik elipsis tombol di sebelah Profil agen default untuk melihat nilai yang dikonfigurasi. Lihat ilustrasi di bawah ini:

Lihat Profil agen default dari Agen Snapshot Agen pembaca:

Profil agen default untuk Pembaca Log Agen:

Tugas Pemeliharaan Replikasi

Selain Agen Replikasi, kami memiliki Pekerjaan Pemeliharaan Replikasi .

Ini adalah pekerjaan Agen Server SQL yang dibuat saat mengonfigurasi Replikasi Transaksional SQL Server. Mereka tersedia untuk memastikan bahwa Replikasi Transaksional bekerja dengan benar.

Beberapa Pekerjaan pada Pemeliharaan Replikasi sangat penting untuk Replikasi Transaksional. Mari kita tinjau.

  • Pembersihan Distribusi: Distribusi – menjalankan sp_MSdistribution_cleanup prosedur untuk menghapus perintah replikasi dari MSrepl_transactions dan MSrepl_commands tabel. Pembersihan terjadi pada basis data Distribusi setelah perintah berhasil dikirim ke basis data Pelanggan berdasarkan nilai periode Retensi Transaksi yang dikonfigurasi dalam basis data distribusi. Secara default, pekerjaan ini berjalan setiap 10 menit di database distribusi. Ubah nilai ini hanya setelah evaluasi mendalam.
  • Agen Pembersihan Riwayat:Distribusi – menjalankan sp_MShistory_cleanup prosedur dalam database distribusi untuk membersihkan catatan sejarah yang lebih tua dari periode Retensi Sejarah yang dikonfigurasi dalam database tersebut. Secara default, ini dikonfigurasi selama 48 hari dan dieksekusi setiap 10 menit. Jika Anda ingin mengubah nilai ini, pertimbangkan semua aspek dengan cermat.
  • Kedaluwarsa Pembersihan Langganan – menjalankan sp_expired_subscription_cleanup prosedur dalam database master untuk menghentikan langganan yang kedaluwarsa atau tidak aktif untuk waktu yang lama. Secara default, prosedur ini dijalankan sekali sehari.

Latensi Replikasi dan Token Pelacak

Latensi Replikasi adalah waktu yang dibutuhkan oleh proses Replikasi untuk melacak setiap perubahan yang terjadi pada artikel yang diterbitkan dari database Penerbit hingga berhasil dikirimkan ke Pelanggan melalui Distributor.

Latensi Replikasi diukur dalam milidetik. Nilai target 0 (replikasi waktu nyata) hingga nilai yang sangat rendah (kasus ideal). Ini adalah salah satu langkah kunci untuk memantau kinerja Replikasi.

Kami dapat memverifikasi Latensi Replikasi menggunakan Monitor Replikasi atau sp_replcounters khusus prosedur.

Sejak Monitor Replikasi memiliki penyegaran tingkat, mungkin ada sedikit penyimpangan dari nilai yang diamati. Untuk mengatasi sedikit penyimpangan saat menghitung latensi Replikasi, Token Pelacak datang untuk menyelamatkan kami.

Klik Token Pelacak tab (lihat gambar di atas) untuk mengirim satu set perintah pengujian baru dari Publisher. Kemudian, ukur kapan sampai ke database Distributor, dan kapan dikirim ke database Subscriber. Klik Sisipkan Pelacak untuk mengirim token pelacak dari database Publisher:

Setelah catatan berhasil diterima di Pelanggan, kami dapat melacak total latensi Replikasi untuk pengaturan kami saat ini. Dalam kasus kami, ini adalah 9 detik:4 detik dari Penerbit ke Distributor, dan 5 detik dari Distributor ke Pelanggan.

Utilitas Tablediff

Utilitas Tablediff(tablediff.exe) akan diinstal di jalur C:\Program Files\Microsoft SQL Server\130\COM setelah kita menginstal Komponen Replikasi.

Utilitas TableDiff membandingkan 2 tabel untuk non-konvergensi. Ini berarti bahwa kita dapat membandingkan 2 tabel dan mengidentifikasi perbedaan di antara keduanya. Kemudian menyinkronkan tabel Tujuan dibandingkan dengan tabel Sumber dengan menghasilkan skrip INSERT/UPDATE/DELETE khusus. Detail lebih lanjut tersedia di dokumentasi resmi.

Karena Replikasi Transaksional SQL Server tidak peduli dengan perubahan manual pada basis data Pelanggan, utilitas ini dapat membantu menyinkronkan jenis tabel ini jika diperlukan. Namun, ia tidak memiliki Wizard atau UI – Anda hanya dapat mengaksesnya melalui Command Prompt atau dari file batch.

Alat lain dapat membuat perbandingan dan sinkronisasi menjadi lebih sederhana. Bundel Bandingkan dbForge untuk SQL Server memeriksa perbedaan dalam database dan tabel tertentu mengidentifikasi dan menganalisisnya. Itu juga menghasilkan skrip yang diperlukan untuk menyinkronkannya. Ini menawarkan antarmuka visual dan banyak opsi untuk menjalankan tugas dengan cepat dan mudah.

Peringatan Agen SQL Server

Semua komponen kunci yang terkait dengan Agen Replikasi berada saat Pekerjaan berada di bawah pekerjaan Agen Server SQL. Oleh karena itu, sangat penting untuk memantau bagaimana pekerjaan SQL Server Agent berfungsi terus-menerus untuk memastikan bahwa Replikasi berfungsi tanpa masalah. Masalah yang paling umum adalah di bawah ini:

  • Masalah izin menjalankan salah satu Pekerjaan Agen Replikasi
  • Masalah izin dalam menjalankan salah satu Pekerjaan Pemeliharaan Replikasi.
  • Masalah izin mengakses Penerbit atau distribusi atau basis data Pelanggan.
  • Agen Server SQL tidak dikonfigurasi untuk memulai secara otomatis saat server dimulai ulang.
  • Beberapa masalah Data terkait Replikasi lainnya seperti konflik, data yang hilang, dan sebagainya.

Itulah mengapa kita harus memiliki mekanisme peringatan yang tepat untuk segera memberi tahu DBA atau orang lain tentang masalah apa pun.

Untuk memperingatkan DBA atau orang lain jika terjadi kegagalan atau kesalahan pekerjaan, kita harus mengonfigurasi Database Mail untuk mengirim peringatan email. Ini memungkinkan DBA untuk merespons sekaligus dan memperbaiki masalah. Kami akan membahas cara mengonfigurasi Database Mail and Alerts di artikel terpisah nanti.

Saat mengonfigurasi Replikasi, SQL Server secara default membuat rangkaian Peringatan di bawah ini. Anda dapat mengonfigurasinya dengan mudah untuk kriteria yang diperlukan. Ini juga memastikan pengiriman Notifikasi ke orang yang diperlukan untuk tindakan segera.

Kesimpulan

Terima kasih telah membaca artikel besar lainnya tentang Replikasi. Saya harap ini membantu memperjelas internal Replikasi Transaksional dan detail tentang Database Distribusi, Agen Replikasi, dan Program Standalone yang bertanggung jawab untuk itu. Kami juga mengidentifikasi Latensi Replikasi, Peringatan, dan Token Pelacak.

Sekarang kita bisa menyelam lebih dalam dan belajar bagaimana menangani dan menyelesaikan masalah Replikasi secara profesional. Nantikan artikel selanjutnya!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa itu Operator Logika di SQL Server - Tutorial SQL Server / TSQL Bagian 124

  2. DATENAME() Contoh di SQL Server

  3. Apa cara terbaik untuk memotong tanggal di SQL Server?

  4. Bekerja dengan Data Salesforce.com di Layanan Pelaporan SQL Server

  5. Bagaimana cara menulis ulang IS BERBEDA DARI dan TIDAK BERBEDA DARI?