web-dev-qa-db-ja.com

SQL Serverのログサイズを管理する方法はありますか

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

私の問題は、ログが成長し続けることです。ログは再利用できるようにマークされているはずですが、なぜログが増え続けるのですか? log_reuse_wait_descは「なし」を示します。

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

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

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

17
Ed Mays

ログファイルは、データベースが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]をクリックして変更を加えます。

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

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

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

27
beach

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

4
SQLMenace

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

DBCC SHRINKFILE (DataFile1, 7)

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

ドキュメント: [〜#〜] msdn [〜#〜]

3
cjk

私の頭の上では、DBCC SHRINKFILEを使用してこれを行うことができます。

0
Miles D