Tidak dapat memotong log transaksi, log_reuse_wait_desc - AVAILABILITY_REPLICA

9

Pagi ini saya dibangunkan oleh log transaksi tanda penuh di salah satu database kami. Server ini adalah gugus selalu dan juga pelanggan replikasi transaksional. Saya memeriksa log_reuse_wait_desc dan itu menunjukkan logbackup. Seseorang secara tidak sengaja menonaktifkan pekerjaan logbackup 4 hari sebelumnya, saya mengaktifkan kembali pekerjaan pencadangan log dan log dibersihkan. Sejak jam 4 pagi saya pikir saya akan pergi ke kantor nanti pagi dan mengecilkan log karena telah tumbuh menjadi 400GB.

10 pagi - Saya di kantor dan saya memeriksa penggunaan log sebelum menyusut dan sekitar 16%. Saya terkejut dan memeriksa log_reuse_wait_desc, yang menunjukkan replikasi. Saya bingung karena ini adalah pelanggan replikasi. Kami kemudian melihat bahwa db diaktifkan untuk CDC dan berpikir bahwa mungkin itu penyebabnya, sehingga CDC dinonaktifkan dan sekarang log_reuse_wait_desc memperlihatkan AVAILABILITY_REPLICA.

Sementara itu, penggunaan log masih terus meningkat dan saat ini 17%. Saya memeriksa dashboard alwayson dan memeriksa antrian terkirim dan mengulang dan keduanya hampir nol. Saya tidak yakin mengapa penggunaan kembali log ditampilkan sebagai AVAILABILITY_REPLICA dan tidak dapat menghapus log.

Tahu mengapa hal ini terjadi?

jesijesi
sumber

Jawaban:

7

Jika kamu melakukan ini:

SELECT * FROM sys.databases

Dan log_reuse_wait_desc menunjukkan AVAILABILITY_REPLICA, itu berarti SQL Server sedang menunggu untuk mengirim data log ke salah satu replika Grup Selalu Di Ketersediaan Anda. Salah satu replika mungkin tertinggal karena jaringan yang lambat, atau mungkin turun sama sekali.

Jika Anda memeriksa dasbor AG dan tidak menunjukkan antrian, Anda mungkin menjadi korban kelelahan benang. Ini adalah masalah yang diketahui bahwa dashboard AG berhenti memperbarui setelah kelelahan pekerja. Anda harus memeriksa status pada setiap replika secara langsung daripada mengandalkan yang utama. Catatan Nick dalam item Connect mengatakan bahwa Anda hanya dapat mengubah properti replika untuk memulai kembali replikasi, tetapi itu tidak selalu berhasil (terutama jika Anda memiliki ratusan basis data pada replika dengan sejumlah besar data yang perlu dikirim, dan memulai kembali replikasi hanya dapat menyebabkan kelelahan ulir pekerja lagi.)

Jika orang terakhir membuat replika AG dan itu tidak seharusnya ada lagi, maka sudah waktunya untuk menghapus AG dan / atau replika itu. Berhati-hatilah karena aplikasi tidak menunjuk ke nama pendengar untuk terhubung ke SQL Server Anda.

Brent Ozar
sumber
Apakah masalah jika sekunder diatur ke mode Async? Jika sekundernya MATI (menunggu diperbaiki), akankah log primer terus bertambah? Terima kasih!
Michael
Selama sekunder masih dalam AG (apakah itu dihidupkan atau dimatikan, sinkronisasi atau async) maka data log akan terus menumpuk. Lagi pula, ketika Anda menghidupkan kembali sekunder, itu harus mendapatkan datanya dari suatu tempat, kan? Itu sebabnya jika rusak untuk jangka waktu tertentu, Anda biasanya lebih baik menghapusnya dari AG, dan menginisialisasi ulang dari cadangan.
Brent Ozar