猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase SQLServer

SQLSERVERのトランザクションログの切り捨て・圧縮

投稿日:

トランザクションログはデータの登録・更新記録です。

復旧モデル

トランザクションログを扱うには、トランザクションログがどのように使用されるかを知る必要があります。
そのためには、
データベースを右クリック>プロパティ>オプションの復旧モデルを確認します。

切り捨て

復旧モデルが完全、一括の場合は、全てのデータを記録していくのでドンドントランザクションログは大きくなります。
しかしバックアップが取られるとログは消えます。注意が必要なのは、ログは消えてもトランザクションログのファイルサイズは変わらないことです。
一旦大きくなったファイルは圧縮しないと小さくなりません。
小さくしても、ファイルサイズが不足してくればおおきくなります。
それが完全、一括です。
(一括ログ復旧モデルは、大量のデータの一括インポートなど、特定の大規模な一括操作のパフォーマンスを向上するために、間欠的にのみ使用する特別な用途の復旧モデルです。)

一方単純はトランザクションログのファイルサイズが増えません。
つまり、トランザクション(=ロールバック)の保障がないということです。
必要な領域を確保すれば、その範囲で使いまわしをします。

トランザクションログがたまってくると、切り捨てが必要な場合があります。


完全復旧モデルまたは一括ログ復旧モデルでは、ログの非アクティブな部分は、そのすべてのログ レコードがログ バックアップでキャプチャされるまで切り捨てることができません。この処理は、”ログ チェーン” を保持するために必要です。ログ チェーンとは、連続したログ シーケンス番号 (LSN) が指定された一連のログ レコードです。以下の条件を満たしていれば、ログはトランザクション ログのバックアップ時に切り捨てられます。

意味はよくわかりませんが、たまってしまった場合です。不幸にもたまったかどうかは、エラーログにもでますし、以下のコマンドでも確認できます。

DBCC SQLPERF(‘DATABASENAME’)

切り捨てが必要になるのは、完全、一括ログモデルです。切り捨てるには、バックアップを行うか、復旧モデルを単純に切り替えます。
単純に切り替えるには以下のコマンドです。

ALTER DATABASE [DATABASE] SET RECOVERY SIMPLE

圧縮

一度大きくなったトランザクションログ・ファイルのサイズは変わりません。
ここが難点です。
ファイルは大きくなるのに小さくならないのです。

トランザクションログを圧縮するには以下の手順です。
データベースを右クリック>タスク>圧縮>ファイル

ファイルの種類にはログを選択します。
圧縮アクションには”未使用領域の解放前にページを再構成する”を選び、トランザクションログファイルのサイズを指定します。
sqlserver_compress

これでログファイルは小さくなりましたが、復旧モデルは単純となっていることに注意してください。

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, SQLServer
-

執筆者:

関連記事

mysql

MySQLのインポートエラー ERROR 1005 (HY000) (errno: 121)

ダンプをインポートする際にたまにるのがこのエラーです。 ERROR 1005 (HY000) at line 23: Can’t create table ‘./[スキーマ]/ …

sqlserver

「.NET」と「ASP.NET」からのSQL Serverへのコネクションを確認する(2)

「.NET」と「ASP.NET」からの接続には大きな違いがあります。 それは普通の?(exe形式の)アプリケーションか、Webアプリケーションかです。 この違いはアプリの終了というタイミングに大きく影 …

sqlserver

SQL Server 構成マネージャーを起動する

SQL Server 構成マネージャーがない。 何故か、コンピューターの管理の中に入っていた。 また検索窓からは以下のように検索できる。 ・SQL Server 2014 の場合   SQLServe …

mysql

MySQL:エラー:The total number of locks exceeds the lock table size

The total number of locks exceeds the lock table sizeは、大量にデータを削除する場合等に発生する可能性があります。 見ての通り、ロックするメモリー不 …

mysql

MySQLのexists

exists自体はほとんどのSQL自体に実装されていると思われます。 しかし、使用方法を誤るとレスポンスに大きな影響を与えてしまします。 副問合せであるexists内部で、集問い合わせのキー列と結合し …