【SQL Server】Always On(AG)「missing log block」イベントの意味と対策・確認方法まとめ🛡️📊

IT・テクノロジー

SQL Server の Always On 可用性グループ(AG)運用中に、次のようなイベント(エラーログ)を見かけて不安になることがあります。😥

  • Always On Availability Groups transport has detected a missing log block...Log scan will be restarted to fix the issue. This is an informational message only. No user action is required.

結論から言うと、多くのケースでは「AGが自動で整合を取り直した」だけで、すぐに障害とは限りません。✅
ただし、頻発したり、同期遅延が増えるなら、原因の切り分けと恒久対策が重要です。🔍

✅ 参考:Always On(AG)やクラスタ障害を“自力で切り分けできる”ようになると、復旧が速くなり運用が一気にラクになります😊
✅ ここから先は、今回の「missing log block」系の調査・再発防止に役立つ資料と、検証環境づくりのおすすめをまとめました📚🛠️

👉おすすめ本

SQL Serverの物理構造と内部動作を理解しよう!

この記事でわかること✨

  • イベントの意味(何が起きたか)📩
  • 代表的な原因(バグ/ネットワーク/I/O)🧩
  • まず見るべき確認ポイント(AG健全性)🩺
  • すぐできる対策と、再発防止(CU適用など)🛠️
  • 「危険サイン」とエスカレーション判断🚨

イベント内容の日本語イメージ(まずは意味を把握)🧠

このメッセージは、ざっくり言うと👇

AGの送受信(transport)が、セカンダリ適用用のログブロックが“連続していない/欠けたように見える”状態を検知
そのため、SQL Server がログスキャンを再開(restart)して整合を取り直した
多くのケースでは情報メッセージで終わる(自動回復)

Microsoft のKBでも、**「低トランザクション環境でこの情報メッセージが出ることがある」**と説明されています。📌


「LSN of last applied log block」とは?🔢

  • **LSN(Log Sequence Number)**は、トランザクションログの位置を示す番号です📍
  • LSN of last applied...セカンダリが最後に適用できた位置 を示します🧾

よくある原因3パターン(現場で多い順)🧩

原因① 既知の不具合(低トランザクション時の発生)🐢

Microsoft KB4541309 では、「10秒に1トランザクション未満」など、トランザクションが少ない環境で発生しうるとされています。
この場合、実害がなくてもログに出ることがあります。😅


原因② SQL Serverの修正が入っていない(CU未適用)🧯

類似の「missing log block / Error 19432」系について、修正KBが複数あります。
例:KB4338746(修正系の案内)
また、SQL Server 2019 CUの修正一覧にも KB4541309 が掲載されています。


原因③ ネットワーク瞬断・遅延/ストレージI/O遅延🌐💽

  • ネットワークが一瞬詰まる(遅延・ドロップ)📡
  • セカンダリ側のディスクが遅くて redo が進まない💾

この場合は、他のHADR系ログや **待機(wait)**にも兆候が出やすいです。👀


まずやるべき確認(5分でできる安全確認)⏱️✅

AGダッシュボードで健全性を確認🖥️

SSMSで👇
Always On 高可用性 → 可用性グループ →(対象AG)→ ダッシュボード

見るポイント🔍

  • Synchronization State:SYNCHRONIZED / SYNCHRONIZING か?✅
  • Data Movement:SUSPENDED になっていないか?🚫

T-SQLで「遅延」と「停止」を数値で見る📊

以下は、セカンダリ(またはイベントが出たノード)での確認に便利です✨
対象DB名 を置き換え)

SELECT
  DB_NAME(drs.database_id) AS db_name,
  drs.is_primary_replica,
  drs.synchronization_state_desc,
  drs.synchronization_health_desc,
  drs.is_suspended,
  drs.suspend_reason_desc,
  drs.log_send_queue_size,
  drs.redo_queue_size,
  drs.redo_rate,
  drs.log_send_rate,
  drs.last_commit_time
FROM sys.dm_hadr_database_replica_states drs
WHERE drs.database_id = DB_ID(N'対象DB名');

この DMV は Microsoft Learn に公式説明があります。

結果の見方(ここだけ押さえればOK)🧭

  • is_suspended = 1 👉 要対応(データ移動が止まっています)🚨
  • log_send_queue_size が増え続ける 👉 送信詰まり📤
  • redo_queue_size が増え続ける 👉 適用(redo)詰まり📥
  • synchronization_health_descNOT_HEALTHY 👉 要調査⚠️

SQL Serverエラーログで「同時刻の別メッセージ」を探す🧾

このイベント単体は軽いことが多いですが、同時刻に👇があると話が変わります😨

  • 接続断(HADR/Endpoint/Network)系
  • I/Oエラー系
  • データ移動停止(SUSPEND)系

対策(症状別に最短ルートで)🛠️✨

単発で、AGが健全なら「基本は様子見」でOK👌

Microsoft KBが示す通り、情報メッセージとして自動回復するケースがあります。
この場合は、運用上は👇だけやっておくと安心です😊

  • その時刻のネットワーク遅延/ドロップ確認📡
  • セカンダリのディスクレイテンシ確認💽
  • AG遅延(queue)が増えていないか確認📊

頻発するなら「CU適用検討」が最優先🧯⬆️

このメッセージは、低トランザクション環境で発生する既知事象として修正KBが存在します。
そのため、頻発するなら👇の流れが堅いです✅

手順📌

  1. SQL Serverのバージョンを確認
SELECT @@VERSION;
  1. 該当バージョンの 最新CU を検討(検証→適用)🧪
  2. 適用後、イベント頻度とAG遅延(queue)を観測📈

同期が戻らない/SUSPENDED になるなら「障害対応」へ🚨

次のどれかに当てはまるなら、情報メッセージ扱いは卒業です⚠️

  • is_suspended = 1 が継続する
  • redo_queue_size / log_send_queue_size が増え続ける
  • ダッシュボードで NOT_HEALTHY が続く
  • 接続断/I/Oエラーが同時刻に出ている

この場合は👇を優先します🧯

  • ネットワーク(瞬断・遅延)調査📡
  • ストレージI/O(レイテンシ、キュー長)調査💽
  • 必要なら再同期(環境方針に従って再初期化/再シード)🔁

再発防止の監視ポイント(運用がラクになる)😌📈

最低限見るべき指標3つ📌

  • log_send_queue_size(送信詰まり)📤
  • redo_queue_size(適用詰まり)📥
  • synchronization_health_desc(健康状態)💚

これらは sys.dm_hadr_database_replica_states で取得可能です。


アラートの出し方(例)🔔

  • queue が 一定時間増え続けたら通知📨
  • is_suspended = 1 を即通知🚨
  • NOT_HEALTHY を一定時間継続で通知⏳

FAQ(よくある質問)❓✨

Q1. 「No user action is required」なら何もしなくていい?🤔

A. 単発でAGが健全なら基本OKです👌
ただし、頻発や **同期遅延(queue増加)**があるなら、CU適用や基盤調査をおすすめします🛠️


Q2. “missing log block”ってログが壊れたってこと?😨

A. 多くは 内部処理上の検知→再スキャンで整合を取り直したという意味です✅
ただし、I/Oエラーや接続断が絡むと別問題になるため、同時刻ログの確認が大事です🧾


Q3. どの数値が増えると危険?📈⚠️

A. 代表は👇です🚨

  • log_send_queue_size が増え続ける(送れない)📤
  • redo_queue_size が増え続ける(適用できない)📥
    DMVで確認できます。

Q4. まず最初にやる「最短の確認」は?🏃💨

A. SSMSのAGダッシュボードで

  • SYNCHRONIZED/SYNCHRONIZING か
  • SUSPENDED になっていないか
    を確認するのが最短です✅

Q5. 頻発する場合、恒久対策は?🧯

A. 最新CUの適用検討が最優先です⬆️
このメッセージに関する修正KBが案内されています。


まとめ(不安を「判断できる運用」へ)🌈✅

  • このイベントは 自動回復の情報メッセージとして出ることがある📩
  • 単発+AG健全なら、基本は様子見でOK👌
  • 頻発なら、既知修正の可能性があるため CU適用検討が強い🧯
  • SUSPENDED/queue増加/NOT_HEALTHYなら、ネットワーク・I/O含めて障害対応へ🚨

この判断軸を持っておくと、アラートが出ても慌てずに「今は問題ない」「今は動くべき」が切り分けでき、運用がかなりラクになります😊✨

コメント

タイトルとURLをコピーしました