17

SQL Server 2008 ログ ファイルのサイズを管理しようとしています。1 日に 1 回読み込まれるレポート データベースがあります。朝の負荷以外にトランザクションがなく、それらのレコードを再作成できるため、単純復旧モデルが最適です。私の目標は、トランザクション ログを固定サイズにすることです。これは、読み込み中に新しい領域を割り当てる必要がないほど十分な大きさです。

私の問題は、ログが増え続けることです。ログを再利用するようにマークする必要があることは知っていますが、ログが増え続けるのはなぜですか? log_reuse_wait_desc には「Nothing」と表示されます。

ログ ファイルを 1 MB に縮小できるので、そこにトランザクションがないことがわかります。これを実行するジョブを設定できますが、ログを 500MB のままにしておくことをお勧めします。これは、毎日の負荷を処理するのに十分です。これを行うと、ログが大きくなります。

ログを一貫したサイズに保つにはどうすればよいですか?

注意: ログ ファイルを縮小しても、この問題は解決されません。私はそれを行う方法を知っています。トランザクション ログのスペースを再利用する方法を見つけようとしています。

4

4 に答える 4

31

ログ ファイルは、データベースが SIMPLE RECOVERY MODE であっても、トランザクション目的で使用されます。LOG サイズが実際に 500 MB を超えて増加している場合は、誰かがそのスペースを必要とするクエリまたはストアド プロシージャを実行しています。

たとえば、レポート テーブルに対してインデックスを作成しているとします。これは、エラーが発生した場合に変更をロールバックできるように、トランザクション内で行われます。ただし、使用済みスペースは、完了後に他のトランザクションのために解放されます。

したがって、ログ サイズが 1MB から始まり、たとえば 700MB まで増加している場合は、そのスペースを必要とする何かが実行されています。サイズを 500MB にロックすると、最終的に「ログ ファイルの容量が不足しています」というエラーが表示されます。

しかし、本当に 500MB で修正したい場合は、次のようにします: (私は SQL Server 2005 を使用しています)

  1. Microsoft SQL Server Management Studio を起動します
  2. データベースを見つけて右クリックします。[プロパティ] を選択します。
  3. ファイルセクションをクリックします
  4. LOG FILE 行を見つけます。
  5. 初期サイズを次のように変更します: 500
  6. Autogrowth セクションを見つけて、楕円 (...) をクリックします。
  7. 「自動拡張を有効にする」のチェックを外します。[OK] をクリックします。
  8. [OK] をクリックして変更を行います。

注: 「autogrowth セクション」で最大ログ ファイル サイズを設定することもできます。

または、次のスクリプトを使用して変更を行うこともできます。DATABASENAME を適切な値に置き換えます。必要に応じて、ログ ファイル名も変更します。

USE [master]
GO
ALTER DATABASE [DatabaseName] MODIFY FILE ( NAME = N'DATABASENAME_Log', SIZE = 512000KB , FILEGROWTH = 0)
GO

于 2009-01-26T19:29:41.523 に答える
5

DB をバックアップしてログを圧縮するメンテナンス ジョブを作成する

于 2009-01-26T18:53:22.703 に答える
3

DBCC Shrinkfile コマンドを使用すると、ターゲット サイズを指定できます。

DBCC SHRINKFILE (DataFile1, 7)

ファイル DataFile1 を 7MB に縮小します

ドキュメント: MSDN

于 2009-01-26T19:17:34.560 に答える
0

私の頭のてっぺんから、DBCCSHRINKFILEを使用してこれを行うことができます。

于 2009-01-26T19:13:07.000 に答える