web-dev-qa-db-ja.com

データファイルより大きいトランザクションログファイル

私は偶然のDBAであり、いくつかのデータベースのトランザクションログファイルに関する一連のアクションを決定するのに助けが必要です。 Brent Ozarのsp_blitzを実行して、SQL Server 2012のインスタンスにどのような懸念があるかを確認したところ、データファイルよりも大きいトランザクションログファイルが1つありました。 1つのデータベースでは、データファイルは3.33 GBで、ログは5.19 GBです。他はほぼ同じ比率を持っています。

このシナリオの説明では、データベースが完全復旧モードの場合にのみ、ログファイルを圧縮する必要がある可能性があることを示しています。このデータベースは単純復旧に設定されています。

ログファイルを圧縮する必要がありますか、それともそのままにしておきますか?

御時間ありがとうございます。

5
JeffRob

ジェフ、ブレント。そのURLには多くのドキュメントを配置します。URLをコピーして、Webブラウザに ドキュメント全体を読む に貼り付けてください。

単純な復旧モデルを使用していて、データベースよりも大きいログファイルがある場合、考えられる原因はたくさんあります。

  • 誰かがトランザクションを開始し、ワークステーションをロックして、週末に家に帰った
  • 誰かが正当に大規模なトランザクションを実行した(データベース全体での大規模な更新など、複数回)
  • バックアップ以外の原因でログが増加しています(ログが何であるかを確認するには、SELECT * FROM sys.databasesを確認し、 log_reuse_wait_desc 列を確認してください)

私のより大きな懸念は、データベースが単純な復旧モデルにあるという事実です。つまり、ポイントインタイムリカバリは実行できません。何か問題が発生した場合は、最後の適切な完全バックアップまで復元しています。多くの場合、企業はデータの損失が多いため不快です。

13
Brent Ozar

したがって、ブレントの回答の項目を最初に調査する必要があります。別の方法で修正する必要がある、より大きな問題がないことを確認してください。

しかし一度実行すれば、進行中の問題がなく、過度のログの増加は、その後解決した問題が原因でした。例えば:

  • ログは、十分に懲らしめられた開発者による1回限りの暴走クエリによって増大しました。
  • Tranログのバックアップに関する一時的な問題が原因でログが増加しましたが、これは修正されました
  • レプリケーションの問題が原因でログが増加しましたが、これは修正されました
  • データベースが完全復旧モードだったためにログが増加しましたが、それらはシンプルである必要がありました(たとえば、prod dbを開発環境に復元しています)。

このような場合、大きなログファイルはほぼ完全に空になるため、ログをより適切なサイズに圧縮しても問題ありません。

その際の注意点:

  1. これはまれな1回限りの操作であり、日常的に行うことではありません。これを定期的に行う必要がある場合は、ブレントのリストにあるアイテムを確認してください。
  2. 常に縮小ファイルを実行し、縮小データベースを実行しない
  3. 縮小データファイル完全に異なる問題であり、パフォーマンスに重大な影響があります。非常にまれで、非常に慎重に計画された状況を除いて、それを行わないでください。
  4. 常に適切なターゲットサイズを念頭に置いて縮小し、縮小して回復しないallログから空き領域を確保する。
  5. VLFサイズがSQLパフォーマンスにどのように影響するかについての情報 Kimberly Trippがここで議論 および要約 このDBA.SEの投稿による についての情報を必ず理解してください。つまり、ログを非常に小さく縮小し、特定のサイズの増分で拡大する必要がある場合があります。
  6. ログ増加の設定が適切であることを確認します(%を使用しないでください 4GBの倍数を使用しないでください 、予想されるVLFサイズの考慮事項に留意してください)。

ターゲットサイズは、データベースで予想されるアクティビティによって大きく異なります。特にシンプルモードでは、データベースのsedデータ領域よりも大きなログは必要ありません。

すべてを理解したら、次のようなステートメントを使用してログを圧縮します。

DBCC SHRINKFILE (name = 'mydb_log', size = 2000)

これにより、ログファイルが2GBに縮小されます。

アクティブなトランザクションがすぐに縮小するのを妨げる可能性があります。その場合は、トランザクションが完了するのを待って、後でコマンドを繰り返します。

完全復旧モードのデータベースに対してこれを実行している場合は、圧縮してからログバックアップを実行し、再度ターゲットサイズに縮小する必要があります。

4
BradC