SQL Server トランザクションログを消す・クリア(サイズを縮小させる)する方法
ここでは、Management Stduioを使用してトランザクションログファイル(ldf)のサイズを小さくする方法を記載しています。
SQL Serverを長期間運用しているとテーブル内のレコードが更新されるとトランザクションログにデータの履歴が記録され、だんだんとトランザクションログが肥大化してきます。その結果サーバー内のストレージが圧迫し思わぬ障害に合うことがあります。運用としては増え続けるトランザクションログを定期的にバックアップし領域をクリアしておくことが大事です。
トランザクションログとは
SQLServerのトランザクションログは、拡張子が「ldf」となっています。トランザクションログは、テーブルにレコードが追加されたり、削除されたり、既存カラムの値が変更されたりとデータの更新履歴情報をすべて保持しています。
手順については、データベースの復旧モデルによって異なります。まず、データベースの復旧モデルを確認する必要があります。
復旧モデルの確認方法
対象のデータベースを右クリックします。次にメニュー内のプロパティをクリックします。
データベースプロパティが表示されるので、ページの選択からオプションをクリックします。右ペインの「復旧モデル」を確認します。復旧モデルは、「完全」、「一括ログ」、「単純」があります。
復旧モデルが「完全」、「一括ログ」の場合の手順
復旧モデルが「完全」及び「一括ログ」に設定されている場合は、過去に一度でもデータベースの完全バックアップ(データベースフルバックアップ)を取得していると、SQLServerはファイルの中身を消すことはしません。トランザクションログファイルのデータは、バックアップしなければ削除されません。
復旧モデルが「完全」及び「一括ログ」の場合でも、データベースの完全バックアップが一度も実行されていない場合は、「トランザクションログファイルを小さくする方法」を実行してください。
「トランザクションログ」を消すには、ログをバックアップしますが、正確には消すわけではなく、バックアップした部分をクリアします。トランザクションログが書き込まれる空き領域が増えます。
対象のデータベースを右クリックします(❶)。表示されたメニューのタスクをクリックします(❷)。次に、バックアップをクリックします(➌)。
まず、バックアップ種類を「トランザクションログ」に変更します(❶)。次にバックアップ先をディスクに変更します(❷)。追加ボタンをクリックして、バックアップ先のファイル名を指定します(➌)。最後にOKボタンをクリックするとバックアップが実行されます。
トランザクションログファイルを小さくする方法
バックアップをしてトランザクションログファイルの中身を消しても、ファイルサイズは小さくなりません。そこで、次の手順でファイルサイズを小さくします。
復旧モデルが単純の場合、本手順のみ実行してください。
トランザクションログのバックアップによって、なぜファイルサイズが小さくならないのでしょうか?それは、ファイルサイズを自動的に小さくしてファイル内に空き領域がなくなれば、トランザクションログを書き込むためファイルサイズを再び大きくしなければなりません。ファイルを変更するためには、CPUやメモリのリソースを多く使用します。そのためパフォーマンス劣化を引き起こすことになるため、ファイルサイズはそのままで、空き領域を保つほうが良いのです。
対象のデータベースを右クリックします。次に「タスク」をクリックします。表示されたメニューから「圧縮」をクリックします。最後にFileをクリックします。
ファイルの種類を「ログ」に変更します。次に圧縮アクションの「未使用領域の解放前にページを再構築する」をクリックします。圧縮先のファイルの容量は、変更したいファイルのサイズを入力します。ただし、必ずしもそのサイズに変更できるとは限りません。
トラブルシューティング
トランザクションログファイルが小さくならない場合は、以下のポイントを確認してみてください。
- 実行中のトランザクションがある
- レプリケーションが構成されていて、配布されていないトランザクションがある
- データベースのミラーリングが構成されていて、まだ配信されていないトランザクションがある
- sync with backupオプションがONに設定されているディストリビューションデータベースのバックアップが行われていない場合
- CHECKPOINTが実行されていない場合