SQL Server 2008ログファイルのサイズを管理しようとしています。 1日に1回読み込まれるレポートデータベースがあります。朝の負荷以外のトランザクションはなく、レコードを再作成できるため、単純復旧モデルが最適です。私の目標は、トランザクションログを、ロード中に新しい領域を割り当てる必要がない十分な大きさの固定サイズにすることです。
私の問題は、ログが成長し続けることです。ログは再利用できるようにマークされているはずですが、なぜログが増え続けるのですか? log_reuse_wait_descは「なし」を示します。
ログファイルを1 MBに縮小できるので、そこにトランザクションがないことがわかります。これを実行するジョブを設定できますが、ログを500MBのままにしておくと、毎日の負荷を処理するのに十分です。これを行うと、ログが大きくなります。
ログを一定のサイズに保つにはどうすればよいですか?
注:ログファイルを縮小しても、この問題は解決されません。私はそれを行う方法を知っています。トランザクションログのスペースを再利用する方法を見つけようとしています。
ログファイルは、データベースがSIMPLE RECOVERY MODEであっても、トランザクションの目的で使用されます。 LOGサイズが本当に500 MBを超えている場合は、誰かがそのスペースを必要とするクエリまたはストアドプロシージャを実行しています。
たとえば、レポートテーブルに対してインデックスを作成している可能性があります。これはトランザクション内で行われるため、エラーが発生した場合に変更をロールバックできます。ただし、使用済みスペースは、完了後に他のトランザクションのために後で解放されます。
したがって、ログのサイズが1MBから始まり、たとえば700MBに増加している場合、そのスペースを必要とする処理が行われています。サイズを500MBにロックすると、最終的に「ログファイルの容量不足」エラーが表示されます。
しかし、本当に500MBで修正したい場合は、以下を実行できます(SQL Server 2005を使用しています)。
注:「自動拡張セクション」でログファイルの最大サイズを設定することもできます。
または、次のスクリプトを使用して変更を加えることもできます。 DATABASENAMEを適切な値に置き換えます。必要に応じて、ログファイル名も変更します。
USE [master]
GO
ALTER DATABASE [DatabaseName] MODIFY FILE ( NAME = N'DATABASENAME_Log', SIZE = 512000KB , FILEGROWTH = 0)
GO
dBをバックアップしてログを圧縮するメンテナンスジョブを作成する
DBCC Shrinkfileコマンドを使用すると、ターゲットサイズを指定できます。
DBCC SHRINKFILE (DataFile1, 7)
ファイルDataFile1を7MBに縮小します
ドキュメント: [〜#〜] msdn [〜#〜]
私の頭の上では、DBCC SHRINKFILEを使用してこれを行うことができます。