Kami sedang bersiap-siap untuk melakukan peningkatan besar pada SQL Server kami dan memperhatikan beberapa perilaku yang tidak biasa dengan Grup Ketersediaan yang Didistribusikan yang saya coba selesaikan sebelum bergerak maju.
Bulan lalu, saya memutakhirkan server sekunder jarak jauh dari SQL Server 2016 ke SQL Server 2017. Server ini adalah bagian dari beberapa Grup Ketersediaan Terdistribusi (DAG) dan Grup Ketersediaan (AG) terpisah . Ketika kami memutakhirkan server ini, kami tidak menyadari bahwa itu akan masuk ke keadaan tidak terbaca , jadi selama sebulan terakhir kami hanya mengandalkan server utama.
Sebagai bagian dari pembaruan yang akan datang, saya menerapkan patch CU 4 ke server dan mem-boot-ulangnya. Ketika server kembali online, sekunder just-patched menunjukkan semua DAG / AG sedang disinkronkan tanpa masalah.
Namun, yang utama menunjukkan kisah yang sangat berbeda. Itu melaporkan itu
- AG terpisah sedang disinkronkan tanpa masalah
- tapi DAGs berada di Tidak Synchronzing / Tidak Sehat negara
Setelah awalnya panik, saya mencoba hal-hal berikut untuk menyinkronkan hal-hal lagi di DAG:
- Dari primary, saya berhenti dan melanjutkan pergerakan data. Ini tidak mulai menyinkronkan data.
- Pada yang kedua (yang baru saya tambal) saya berlari
ALTER DATABASE [<database] SET HADR RESUME;
- yang mengeksekusi tanpa kesalahan, tetapi tidak melanjutkan sinkronisasi apa pun
Upaya terakhir saya untuk menyinkronkan data lagi adalah login ke sekunder, dan secara manual restart layanan SQL Server. Memulai ulang layanan secara manual tampaknya agak ekstrem, karena saya perkirakan server yang dibooting ulang sudah cukup.
Adakah yang mengalami masalah ini ketika DAG tidak mulai menyinkronkan ke sekunder setelah reboot? Jika demikian, bagaimana cara mengatasinya?
Saya memeriksa log kesalahan SQL Server, dan penampil acara di server sekunder, tidak ada yang luar biasa yang bisa saya lihat.
Jawaban:
Harap dicatat, ini bukan jawaban yang pasti tetapi itu adalah jawaban terbaik setelah mengobrol dengan Taryn .
Jika basis data dan AG individu yang mendasari ag terdistribusi mengatakan mereka sehat dan menyinkronkan, ada kemungkinan bagus ini hanya masalah di DMV dan / atau dasbor SSMS. Karena tidak ada dalam errorlog untuk menyarankan replika tidak terhubung atau dalam keadaan terputus.
Sayangnya karena masalah telah diselesaikan, sulit untuk mengatakan dengan tepat apa itu ... tetapi di masa depan jika ini terjadi pada seseorang:
sqlserver.hadr_dump_log_block
atausqlserver.hadr_apply_log_block
untuk melihat apakah sekunder benar-benar menerima / menerapkan blok log atau ...SQLServer:Database Replica\Log Bytes Received/sec
Jika Anda menerima data pada sekunder itu tetapi ag didistribusikan masih menunjukkan tidak menyinkronkan atau tidak sehat maka saya akan membiarkannya untuk melihat apakah nilai DMV berubah karena jelas menerima dan memproses blok log.
Namun, jika tidak maka kita perlu menyelidiki lebih lanjut yang berada di luar jangkauan jawabannya.
sumber
Saya akan mengawali ini semua dengan peringatan bahwa saya tidak memiliki DAG dalam produksi. Meskipun pada dasarnya saran ini harus berlaku antara AG dan DAG.
Apakah sinkronisasi dilanjutkan setelah layanan restart? Jika demikian maka tebakan terbaik saya untuk penyebabnya adalah pemblokiran pada redo SPID. Jika masih tidak menyinkronkan bahkan setelah restart, inilah yang akan saya periksa pertama kali:
Memblokir AG mengulangi SPID
Umumnya hanya akan terjadi pada sekunder yang dapat dibaca. Untuk memeriksa, jalankan yang berikut:
Jika ada
DB STARTUP
SPID pemblokiran yang muncul, Anda harus membunuhnya sebelum yang kedua dapat dilanjutkan ( SPID yang menangani operasi yang diulang). Saya sarankan meninjau SPID pemblokiran terlebih dahulu untuk mencoba dan menentukan penyebabnya (biasanya laporan berjalan lama).Jika Anda ingin informasi lebih lanjut tentang ini, ada artikel bagus (termasuk pemantauan untuk jenis perilaku ini menggunakan XE) di sini .
Periksa DMV
Jika perpindahan data ditangguhkan, Anda dapat merujuk ke DMV untuk mendapatkan informasi lebih lanjut tentang alasan penangguhan. Jalankan yang berikut ini:
The Artikel BOL menjelaskan suspend_reason sedikit lebih jauh.
sumber
Apakah Grup Ketersediaan Terdistribusi (DAG) Anda terbagi antara wilayah yang berbeda? Jika demikian, Anda mungkin menderita karena nilai SESSION_TIMEOUT default (10 detik) terlalu rendah. Ini berarti bahwa latensi antara kedua wilayah terlalu tinggi untuk menyelesaikan sinkronisasi yang andal.
Grup ketersediaan normal dapat memiliki nilai SESSION_TIMEOUT meningkat untuk membuat sesi sinkronisasi lebih stabil. Saya perhatikan akhir tahun lalu bahwa parameter SESSION_TIMEOUT dari DAG tidak dapat diedit. Ini berarti bahwa DAG hanya layak untuk skenario latensi rendah. Kami mencatat tiket dengan Microsoft dan awal tahun ini perbaikan terbaru dirilis.
Peningkatan: Mengkonfigurasi nilai SESSION_TIMEOUT untuk replika Grup Ketersediaan Terdistribusi di SQL Server 2016 dan 2017
sumber