RDS for MSSQLServerのトラザクションログ自動拡張が間に合わない

はじめに

瀬田@大阪オフィスです。MSSQLServerで、お馴染みの現象がRDSでも発生するということを経験したので共有です。 フルマネージドのRDSとはいえ、各プロダクトの挙動を引き継いでいるのでやはり考慮すべき点はあるよなあと反省案件しています。

現象

SQL Server エラー 9002が発生し、DBへの書き込みができなくなりました。ログの自動拡張は有効の状態でした。現象としては以下のドキュメントのものとなります。

満杯になったトランザクション ログのトラブルシューティング (SQL Server エラー 9002)

原因

大量のトランザクションが短期間に発生したことにより、トランザクションログが設定値を越えたことでDBは書き込みを停止しました。自動拡張は設定していましたが、拡張処理が間に合いませんでした。

対策

MSから以下のドキュメントで注意事項が記載されていました。
SQL サーバーの「自動拡張」および「自動圧縮」の設定に関する考慮事項

管理された運用システムでは、自動拡張が予期しない拡張のための不測の事態であると考える必要があります。 自動拡張を使用して、日々のデータとログの拡張を管理しないでください。

自動圧縮と自動拡張は、訓練されたデータベース管理者 (DBA) が慎重に評価する必要があります。これらは管理されないままにしてはいけません。

「自動拡張はあくまで不測の事態に備えるものであり、適切に設計・管理してね!」とのことで、お任せしてしまっていいものではないようです。 なので、対応策は以下となります。

  • トランザクションログの必要容量は想定値を設定し、監視を行いながら適宜メンテナンスをすること。
  • 急激なトフィックの増加が見込まれる場合は、事前にログ容量を拡張すること。

最後に

自動拡張系の機能は極端なトラフィックスパイクに対応しきれない場合があるため、過信しすぎず事前計測と見積もりという基本と正道をしっかり行いましょう!