連載
» 2018年01月22日 05時00分 公開

SQL Serverトラブルシューティング(64):バックアップ処理でタイムアウトが発生した(処理遅延トラブル) (1/2)

本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。今回は「バックアップ処理でタイムアウトが発生した」場合の解決方法を解説します。

[椎名武史,ユニアデックス株式会社]

SQL Serverトラブルシューティング一覧

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 53(カテゴリー:処理遅延トラブル):バックアップ処理でタイムアウトが発生した

 「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します(本トラブルシューティングの対応バージョン:SQL Server 全バージョン)。

トラブルの実例:夜間処理用の時間帯にバックアップが終了するようにクエリタイムアウトを設定した上で、定期的にバックアップを採取していた。普段は問題なく処理が完了していたが、ある時バックアップ処理中にエラーが発生した。WindowsイベントビューアーでWindows ログの「Application」の項目を確認すると、「エラー3041」が記録されていた(図1)。

図1 図1 Windowsイベントビューアーで「エラー3041」を確認

トラブルの原因を探る

 記録されていた「エラー3041」には、「BACKUPで、コマンドBACKUP DATABASE DBを完了できませんでした。詳細メッセージについては、バックアップアプリケーションログを確認してください」とあります。バックアップを実行していたアプリケーションのメッセージを確認したところ「タイムアウトが発生しました」と記録されていました。

 データベース自体のサイズはほとんど変わっていないため、バックアップ対象が増えたことによるタイムアウトではなさそうです。同時に実行している処理がないため、負荷による処置遅延でもなさそうです。

 データベースをバックアップする際には内部的にチェックポイント(*1)が実行され、メモリ上で修正されたデータをディスクに書き込む必要があります。既定ではチェックポイントの動作はエラーログには記録されませんが、トレースフラグの3502、3504、3605を有効にすることで、動作を確認できます(関連記事)。

 これらのトレースフラグを次のクエリを使って有効にした状態でバックアップを実行し、エラーログを確認してみます(図2)。


DBCC TRACEON (3502, 3504, 3605, -1);
トレースフラグ3502、3503、3605を有効にするクエリ
図2 図2 エラーログでチェックポイントの実行時間を確認

 バックアップコマンドが失敗する直前にチェックポイントのログが出力されていたことが確認できました。

 メモリ上の修正されたページが少ない場合は、短時間で終了しますが、修正されたページが多数存在する場合は、チェックポイントの実行にも時間を要します。

 バックアップコマンドを実行した際のクエリタイムアウトの時間にはチェックポイントの実行時間も含まれるため、「Ckpt dbid XX started」(XXは整数)から「Ckpt dbid XX complete」までに時間を要している場合は、バックアップの処理においてタイムアウトが発生する場合があります。



       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。