トランザクションログを切り捨てることができません、log_reuse_wait_desc-AVAILABILITY_REPLICA


9

今朝、私はデータベースの1つでトランザクションログが一杯になったという警告に目覚めました。このサーバーは、常時接続のクラスターであり、トランザクションレプリケーションサブスクライバーでもあります。log_reuse_wait_descを確認したところ、logbackupが表示されました。4日前に誰かが誤ってlogbackupジョブを無効にしていたため、ログバックアップジョブを再度有効にしたところ、ログがクリアされました。午前4時だったので、その朝遅くにオフィスに行って、ログが400GBに達したときにログを鳴らそうと思いました。

午前10時-オフィスにいて、縮小する前にログの使用状況を確認したところ、約16%でした。私は驚いて、複製を示したlog_reuse_wait_descを確認しました。これがレプリケーションサブスクライバーだったため、混乱しました。次に、dbがCDCに対して有効になっていることがわかり、それが原因である可能性があるため、CDCを無効にすると、log_reuse_wait_descにAVAILABILITY_REPLICAが表示されます。

一方、ログの使用量は着実に増加しており、現在は17%です。alwaysonダッシュボードを確認し、送信済みキューとやり直しキューを確認しましたが、どちらもほぼゼロです。ログの再利用がAVAILABILITY_REPLICAと表示され、ログをクリアできない理由がわかりません。

なぜこれが起こっているのでしょうか?

回答:


7

これを行う場合:

SELECT * FROM sys.databases

また、log_reuse_wait_descはAVAILABILITY_REPLICAを示します。これは、SQL ServerがログデータをAlways On可用性グループのレプリカの1つに送信するのを待っていることを意味します。ネットワークの速度が遅いため、レプリカの1つが遅れているか、完全にダウンしている可能性があります。

AGダッシュボードを確認してもキューが表示されない場合は、スレッドが使い果たされている可能性があります。AGダッシュボードがワーカースレッドの枯渇後に更新を停止すること既知の問題ですプライマリに依存するのではなく、各レプリカのステータスを直接確認する必要があります。ニックは、Connectアイテムでレプリカのプロパティを変更してレプリケーションを再開できると述べていますが、これは常に機能するわけではありません(特に、大量のデータを送信する必要があるレプリカに何百ものデータベースがある場合、レプリケーションを再開すると、ワーカースレッドが再び枯渇する可能性があります。)

最後の男がAGレプリカをセットアップし、それがもう存在しないことになっている場合は、そのAGやレプリカを削除する必要があります。SQL Serverに接続するために、アプリがリスナー名を指していないことに注意してください。


セカンダリが非同期モードに設定されているかどうかは重要ですか?セカンダリがオフ(修正されるのを待っている)の場合、プライマリログは増加し続けますか?ありがとう!
マイケル

セカンダリがまだAGにある限り(オンまたはオフ、同期または非同期)、ログデータは蓄積され続けます。結局のところ、セカンダリの電源を入れると、どこかからデータを取得する必要がありますよね?そのため、一定期間破損した場合は、通常、AGから削除し、バックアップから再初期化することをお勧めします。
ブレントオザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.