recovery interval オプション

recovery interval オプションを使用して、Microsoft SQL Server がデータベースを復旧するのに必要な時間の最大値を、データベースごとに分単位で設定します。SQL Server のインスタンスが開始されるたびに、コミットされなかったトランザクションをロールバックし、コミットされても SQL Server のインスタンスが停止したときに変更がまだディスクに書き込まれていないトランザクションをロールフォワードすることで、各データベースが復旧されます。この構成オプションでは、各データベースの復旧に必要な時間の上限が設定されます。既定値は 0 です。これは SQL Server によって自動構成されることを示します。実際には、復旧時間が 1 分未満で、アクティブなデータベースのチェックポイントは約 1 分間隔になります。

recovery interval オプションでは、SQL Server によって各データベースでチェックポイントが実行される時点が制御されます。チェックポイントは、データベースごとに設定されます。チェックポイントでは、SQL Server により、すべてのログ情報と変更されたすべてのページがメモリからディスクに確実にフラッシュされます。これによって、ロールフォワードしてディスクに書き込むトランザクションの数が制限されるので、復旧時間も制限内に抑えられます。チェックポイント前の変更は、チェックポイント時に既にディスクにフラッシュされているので、ロールフォワードする必要はありません。

recovery interval オプションは、実行時間が長いトランザクションを元に戻すために必要な時間には影響しません。たとえば、実行時間の長いトランザクションが 2 時間かけて更新した後にサーバーが使用不能になった場合、長いトランザクションをロールバックすることになるので、実際の復旧時間は recovery interval 値よりもはるかに長くなります。

SQL Server では、復旧時間間隔内にいくつのデータ変更をロールフォワードできるかが推定されます。通常、前回のチェックポイント後にデータベースで行われたデータ変更の数が、SQL Server で復旧時間間隔内にロールフォワードできると推定した数に達したときに、SQL Server によってデータベースのチェックポイントが実行されます。推定値に満たない場合でも、ログ サイズが全体の 70% に達すると、SQL Server によってチェックポイントが実行されます。

各データベース内のチェックポイントの生成頻度は、時間ではなくデータの変更量によって決まります。主に読み取り専用の操作に使用されるデータベースでは、多くのチェックポイントは生成されません。トランザクション データベースでは、頻繁にチェックポイントが生成されます。

チェックポイントが実行される頻度が多すぎてパフォーマンスが低下していると判断される場合以外は、recovery interval を 0 (自己設定) のままにしてください。パフォーマンスが低下していると判断される場合は、少しずつ値を増加してみます。

recovery interval オプションは拡張オプションです。sp_configure システム ストアド プロシージャを使用して recovery interval の設定を変更するには、show advanced options を 1 に設定する必要があります。新しい設定は、サーバーを再起動しなくてもすぐに有効になります。

recovery interval オプションに 60 (分) を超える値を設定するには、RECONFIGURE WITH OVERRIDE ステートメントを実行する必要があります。