• システム開発に関わる内容をざっくりと書いていく

SQL Server 統計情報更新のタイミング

オプティマイザは統計を見て行数を推定する。古い/偏った統計のままだと、スキャン過多や悪い結合順になり、突然遅くなる。自動更新に任せきりか、メンテジョブで触るかが運用の分岐点。

先に結論

  • 大きなデータ変更のあと・バッチ後・リリース後は「遅くなったら統計」を疑う価値がある
  • 自動更新は便利だが、巨大表では発火が遅く・更新自体が重いことがある
  • 重要な表はメンテ枠で明示更新+代表クエリの計画確認が安定しやすい
  • フルスキャン更新は正確だが重い。サンプル率はサイズと許容時間で決める

いつ更新を検討するか

  • 大量挿入・更新・削除の直後
  • 夜間バッチやデータ移行のあと
  • 索引再構築と合わせて計画を安定させたいとき
  • 推定行と実際行が大きくズレているとき
  • パラメータスニッフィング疑いの前提確認として

運用の型

  • 小さい表: 自動更新でも十分なことが多い
  • 大きい表: 対象を絞った定期ジョブ+変更率の監視
  • 更新中の負荷に注意(業務ピークと重ねない)
  • 更新後にキークエリの計画が悪化していないかスポット確認

関連: 実行計画でインデックスが使われない

やりがちな失敗

  • 全 DB を毎時フル更新(メンテがボトルネックになる)
  • 遅い原因がロックなのに統計だけ触って終わる
  • 更新タイミングをデプロイと重ねて計画が毎回揺れる

ざっくりまとめ

  • 大量変更のあとは統計を疑う
  • 巨大表は自動任せ+明示メンテの併用
  • 更新したら代表クエリで効果を確認

関連記事