web-dev-qa-db-ja.com

SQLServerトランザクションログのバックアップが非常に大きい

SQL Server 2008 R2には、毎晩完全バックアップがあり、10分ごとにトランザクションログバックアップがあるデータベースがあります。データベースは完全復旧モデルです。

問題は、トランザクションログのバックアップファイルのサイズが数百メガバイトであるが、絶対にそうではないことです。データベースには、そのアクティビティの近くにはありません。各バックアップは10分間のみです。それらは非常に大きいので、数日後にはハードディスクが完全にいっぱいになります。

そのバックアップが非常に大きくなる原因と修正方法はありますか?

7
Dustin Martin

同じページにいることを明確にするために、eachログバックアップは数百MBであり、ログファイル(LDF)ではないと言っています)大きいです。後者は通常、レプリケーション、ミラーリング、忘れられたアクティブユーザートランザクション、または sys.databases.log_reuse_wait_desc にリストされているその他のものによってログが固定されることによって説明されます。しかし、そうではないことを理解しています。 10分ごとに実行されるログバックアップにそれぞれ数百MBがある場合、過去10分間に数百MB相当のアクティビティが発生している必要があることを意味します。おそらく、あなたが気付いていない活動が絶えず起こっているのでしょうか?

もちろん、ログバックアップタスクにWITH NO_TRUNCATEまたはWITH COPY_ONLY構文を使用しないことを前提としています。

次の3つのクエリにより、ログが何で埋められているかがわかります。

use [<myproblemdb>];
go

select count(*) as CountLogRecords, 
    sum([Log Record Length]) [Total Log Length]
from fn_dblog(null, null);

select count(*) as CountTransactionRecords, 
    sum([Log Record Length]) [Transaction Log Length],
    [Transaction ID]
from fn_dblog(null, null)
group by [Transaction ID]
order by 2 desc;

select count(*) as CountLogOperations,
    sum ([Log Record Length]) as [Operation Log Length],
    [Operation]
from fn_dblog(null, null)
group by [Operation]    
order by 2 desc;
3
Remus Rusanu

VLFが多すぎる可能性があります。 DBCC LOGINFOを実行して、返される行数を確認します。多数ある場合は、データベースのトランザクションログを縮小し、1つのステップで適切なサイズに拡大することを検討してください。

1
SuperCoolMoss

バックアップが取られる前に、トランザクションログファイルにはどのくらいのデータがありますか?これは、DBCC LOGINFOを使用するか、SQL Server ManagementStudio内のディスク領域レポートを確認することで確認できます。ログバックアップの大きさはどれくらいですか?

1
mrdenny