私はやや新しいDBAであり、かなりの量のアクティビティがあるSQL Server 2012インスタンスを管理しています。ポイントインタイムリカバリが必要なため、フルリカバリモードで実行しています。
現在、私は毎日午前5時にデータベースとログの完全バックアップを取っています。一部のログファイルは最大300 GBに膨らみ、バックアップを取ってもサイズは小さくなりません。次のようなものを実行することで、サイズを小さくすることができます。
BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);
バックアップファイルのLSNを確認すると、次のようなものが表示されます。
RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN: 15781000014686200001
SecondLSN: 15802000000665000001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN: 15802000000665000001
SecondLSN: 15805000000004100001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN: 15805000000004100001
SecondLSN: 15808000000004200001
ログファイルを縮小してログチェーンを破壊しているとは思わない。これを読んで、これらの圧縮されたログファイルは再成長する必要があるため、パフォーマンスが低下していると思います。
質問:
- バックアップ後にログファイルが縮小しないのはなぜですか?コミットされていないトランザクションがあるためですか?
- 最初は、午前5時のバックアップごとにログファイルを圧縮する必要があると考えていました。それがパフォーマンスにどのように悪いかを読んだ後、私は今、日中数時間ごとに定期的なログのバックアップをとる必要があると信じています。あれは正しいですか?
- データベース/ログの通常のフルバックアップは毎日午前5:00に行われ、時には3時間かかります。ログバックアップを1時間ごとに実行するようにスケジュールした場合、ログバックアップが午前5時のバックアップと衝突するとどうなりますか?