Azure の PaaS の SQL Server である、SQL Database は計画メンテナンスにより、メンテナンスが発生した際には、SQL Server のサービスの再起動が発生します。
計画メンテナンスの情報については、Azure SQL Database および Azure SQL Managed Instance での Azure メンテナンス イベントの計画 に記載されています。
最新のドキュメントでは、記載内容が変わっていますが、古いドキュメント では、次のように記載されていました。
Contents
頻度
平均すると、1 か月に 1.7 回の計画メンテナンス イベントが発生します。
今は、次のような機能が追加されており、計画メンテナンスが以前より把握しやすいようになっていますが、どこかのタイミングで計画メンテナンスによる再起動を発生し、再起動を完全に抑えることはできません。
計画メンテナンスによる瞬間的な接続の切断が行われたかの状況については、標準のメトリックの「Failed Connections」を使用して確認することができるそうです。
このメトリックを使用したアラートルールを設定して接続の失敗を把握することで、メンテナンスが行われたのかを把握するという方法をとることもできるのではないでしょうか。
それ以外の方法として、DMV から SQL Server の起動時間を取得するという方法をとることもできます。
今回の投稿ではこの方法についてまとめておきたいと思います。
DMV を使用した最終起動日時の取得
最終起動日時については、2 種類の DMV から取得することができます。
- sys.dm_user_db_resource_governance
- last_updated_date_utc
- 最後の設定の変更または再構成の日付と時刻 (UTC)。
- sys.dm_os_sys_info
- sqlserver_start_time
- 最後に開始されたローカルシステムの日付と時刻を指定し SQL Server ます。 NULL 値は許可されません。
他の多くの SQL Server Dmv の情報には、前回のデータベースエンジンの起動以降のアクティビティのみが含まれます。 この列を使用して、最後に起動した時刻を検索し SQL Server データベース エンジン ます。
SELECT (SELECT last_updated_date_utc FROM sys.dm_user_db_resource_governance) AS last_updated_date_utc, (SELECT sqlserver_start_time FROM sys.dm_os_sys_info) AS sqlserver_start_time
定期メンテナンスにより再構成が行われたタイミングや、SQL Server のデータベースエンジンのサービスが再起動したタイミングをこれらの DMV から取得することができます。
SQL Database は SQL Server の再起動を行うことなく、ホットパッチでパッチの適用が行われることがあります。
そのため、サービスの再起動を行うことなく、設定の変更が行われるというケースもあるようで、上述の二つの情報が同一にならないこともありそうですが、どのようなタイミングで再起動が発生したかなどを確認することができます。
活用方法としては、次のようなクエリを実行することで、最後に再起動をしてからの日数を確認することができます。
SELECT DATEDIFF(day, (SELECT last_updated_date_utc FROM sys.dm_user_db_resource_governance),GETDATE()) AS last_updated_date_utc, DATEDIFF(day, (SELECT sqlserver_start_time FROM sys.dm_os_sys_info),GETDATE()) AS sqlserver_start_time
接続のエラーが発生した場合、「どのような事象によって発生したか」を調査する必要がありますが、PaaS のメンテナンスによって接続が切断されたかどうかについては、このような情報を取得することで確認することができるのではないでしょうか。