 |
| 7.トランザクションログファイルの圧縮 |
|
|
データベースのトランザクションログファイルの管理を怠ると、気がついたときにはトランザクションログファイルが巨大に成長していたというような
事態に直面することがあります。例えば図21のように、データファイルは150MB程度なのに、トランザクション
ログファイルは430MBのような大きさです。
|
 |
| 図21:データファイルは150MB程度なのに、トランザクションログファイルは430MBのような大きさです
|
|
 |
データベースの全体バックアップを実行した後で、トランザクションログファイルを切り捨てて、ログファイルを圧縮するという通常のログ管理手順を 実行してみましょう。
まず最初に図22のように、データベースのバックアップメニューを選択します。
|
 |
| 図22:データベースのバックアップメニューを選択します
|
|
 |
次に図23のように、データベースの全体バックアップを実行します。トランザクションログファイルの切り捨てを行うと、そのデータベースをログから復元することはできなくなります。
そのため新たにデータベースを復旧するための基点となる全体バックアップデータファイルが必要です。
バックアップ先データファイルは、ディスク上のC:\dbSample_Data.bak とします。
|
 |
| 図23:データベースの全体バックアップを実行します
|
|
 |
|
図24のように、全体バックアップファイルが作成されました。その大きさは、70MB程度です。
実はこのデータベースのテーブルでは、レコード数の大きなテーブルを作成したり削除したりを繰り返しており、データファイルの中は、 スカスカの状態となっています。
|
 |
| 図24:全体バックアップファイルが作成されました
|
|
 |
次に図25のように、データベースの圧縮を選択します。トランザクションログの切り捨て処理で、
そのファイルサイズを小さくするためには事前にデータベースの圧縮を実施しておきます。
データベースの圧縮処理で切り捨てられる部分に目印を付けて、ログの切り捨て処理でその部分を開放します。
|
 |
| 図25:データベースの圧縮を選択します
|
|
 |
図26で、データベース全体の圧縮を指示します。568MBのサイズの中に、82%もの空きがあることがわかります。
最大空き容量は0%にして圧縮を行います。0%とはできる限りの圧縮を行うという意味です。
|
 |
| 図26:データベース全体の圧縮を指示します
|
|
 |
|
データベースを圧縮した後の状態は、図27のようになりました。
|
 |
| 図27:データベースを圧縮した後の状態
|
|
 |
図21と比較すると、
MDFデータファイル
150,592 -> 142,592
LDFトランザクションログファイル
430,144 -> 315,648
トランザクションログファイルが100MB以上も小さくなりました。
次にログの切り捨て処理を行うために、ログのバックアップ処理を行います。SQLServer2000のEnterprise
Managerでは、ログの切り捨て処理だけを 行うオペレ−ションはありません。ログのバックアップを取ると同時に、ログを切り捨てる方法を行います。
図28のように、データベースのバックアップメニューの中の、ログのバックアップを選択します。
|
 |
| 図28:データベースのバックアップメニューの中の、ログのバックアップを選択します
|
|
 |
バックアップ先は、
C:\db\Sample_Log.bak
とします。
|
 |
 |
| 図29:アクティブでないエントリをトランザクションログから削除する
|
|
図29のように、
アクティブでないエントリをトランザクションログから削除する
というオプションを付けます。このオプションがログの切り捨て処理になります。
ログの切り捨て処理を実行すると、図30のようになりました。
|
 |
| 図30:ログの切り捨て処理を実行後の画面
|
|
 |
データベースを圧縮した直後と比較すると、ログファイルの大きさに変化がありません。このデータベースでは運良くデータベースの圧縮機能によって
ログファイルが圧縮できた事例となります。
バックアップされたトランザクションログファイルの大きさ(3680KB)に比べると、今のトランザクションログファイルの大きさが異常に大きいことが
わかります。これはログの切り捨て効果が現れなかったと考えられます。ログファイルの最後の方に、アクティブなログが存在すると物理的な
ファイルサイズを小さくすることはできません。
ログの切り捨て操作でもログファイルの大きさが変わらなかったことから、あと少しログを書き込むとログファイルの終端に達してログファイルの先頭に
戻ってくることがわかります(ログの切り捨て操作を行うと、切り捨てられた空き領域が使われます)。そこでダミーのログを書きこむことにします。
ダミーのログを書きこむための一番簡単な方法は、クエリアナライザによるSQL文の実行です。本連載ではSQL文を使わないと宣言しましたが、読者の皆様、
申し訳ありません。Enterprise Managerでレコードを更新してもよいのですがあまりにも苦痛になりそうなので、スクリプトを実行させます。
|
 |
 |
| 図31:クエリアナライザを立ち上げて、UPDATE文によるレコードの更新を行います
|
|
図31のようにクエリアナライザを立ち上げて、UPDATE文によるレコードの更新を行います。
データベースの中に存在するあるテーブルの中のあるレコードのある列の値を更新します。ただ更新する値は、今の値をそのまま代入するだけなので、
実質的には変化がありません。ただ更新命令を実行することによって、トランザクションログが書き込まれ、ログの書きこみ位置がファイルの終端から
ファイルの先頭に戻ることを狙ったものです。書き込む回数は適当にします。100回のつもりが101回になっていますね。
ダミーのログレコードを書き込んだら、図32のように、データベースの圧縮操作を再び行います。
|
 |
| 図32:データベースの圧縮操作を再び行います
|
|
 |
|
図33のように、目標サイズは0%にします。
|
 |
| 図33:目標サイズは0%にします
|
|
 |
この後、再びトランザクションログファイルのバックアップとその切り捨てを実行したら、図34のように
トランザクションログファイルの大きさが、最初に作成した10MBの大きさになりました
(図17参照)。
|
 |
| 図34:トランザクションログファイルの大きさが、最初に作成した10MBの大きさに
|
|
 |
 |
 |
|
|
 |
(C) 2005 Professional Association for SQL Server Japan. All rights reserved. |
 |