目的
DEFRAGMENTコマンドにより、現在の対象範囲内にある、対象となる各論理 シリンダ上の空きセクターは、その シリンダ上での単一の連続ブロックの空き領域へと組み合わせされます。使用される有効範囲は、SCOPEコマンドで指定されます。SCOPEコマンドが発行されていない場合は、デフォルトで指定されます。
構文
- FORCE
- 次の「使用上の注意」に示されている基準に合致するかどうかにかかわらず、シリンダをすべてデフラグメントします。
- /Y
- このコマンドを実行するかどうかを確認するプロンプトを回避します。
Ferret ABORTコマンドを使用して、コマンド実行中に操作を中断できます。それが開始されると、ABORTはデフラグメントを停止し、vprocの現在の状況を報告します。
使用上の注意
シリンダは、テーブル データの変更にともない断片化されます。 データ ブロック(DB)の作成、削除、あるいはDB変更によるサイズの変化により、新たに割り当てられたシリンダで、少数の大きな空き領域が大量の小さな空き領域となります。 シリンダ内で大量の空きセクターが依然として存在する可能性があるものの、時間経過にともない、新たなDBを格納するのに十分な、連続した空きセクターは少なくなります。 新しいDBがシリンダに格納できない場合、空きのある新たなシリンダを見つけて割り当てる必要があります。
デフラグメントのプロセスでは、データ ブロックを整理し、空いている領域をシリンダに新たなDBが割り当てられるだけの領域に合体します。これにより、新たなデータ ストレージに空きシリンダを割り当てる必要性が減ります。このデフラグメントのプロセスは、断片化したシリンダから新しいシリンダにデータ ブロックを移動します。その新しいシリンダで各ブロックがパックされて、連続する空きセクターの1個の大きなブロックになります。DBの移動元であるシリンダは解放され、新たな割り当てに利用できます。
したがって、デフラグメントの操作は費用がかかります。このため、システム リソースが十分な場合のみ実行してください。
FORCEオプションが使用されなければ、DEFRAGMENTコマンドは、以下のすべての基準が満たされていない限り、対象範囲内の論理シリンダのデフラグメントを実行しません。
- シリンダに複数の空きセクターのセットがあり、組み合わせ対象がある。
- 25%以上の空きセクターがシリンダ上にある。
- 空きセクターのセットから成るセクター数の平均が、そのシリンダ上のデータ ブロックの平均サイズ未満である。
FORCEオプションが使用されれば、DEFRAGMENTコマンドは、対象範囲内の論理シリンダに複数の空き領域のブロックがある場合に、デフラグメントを実行します。この場合、これは空きセクターのパーセンテージまたは平均ブロック サイズと関係なく、 シリンダのデフラグメントを実行します。
DEFRAGMENT操作は、データ ブロックのサイズまたは内容は変更しないことに注意してください。既存のブロックを移動させることもできますが、そうでない場合は未変更のままです。
Ferretは、デフラグメントするシリンダの数をAMPごとに示します。例えば、次のようになります。
vproc 2 response Requested Cylinder Range had 197 cylinders placed on the defrag list
完了すると、デフラグメントされたシリンダの実際の数が、システムのメッセージ ログにAMPごとに記録されます。例えば、次のようになります。
002507 14:47:07 043100d6 ... 44 8 340516600|appl|1|S|I|U|0|0|M|0|0|PDE|0|0|0|1#PDElogd: Event number 34-05166-00 (severity 10, category 10) 5166: Defragment of cylinder[s] occurred. On Wed Jun 22 14:47:07 2016 on NODE 001-01, VPROC 2, partition 9, task fsubackgrnd 197 cylinder[s] defragmented
デフラグメントはバックグラウンド タスクとして実行され、Ferretプロンプトが復帰した後でも実行を継続できます。デフラグメントがいつ完了したかを確認するには、DBC.SW_Event_Logでevent_tag=34-05166-00を調べてください。
Teradata Databaseでは、一部のファイル システム エラーについて、影響を受ける特定のデータ サブテーブルやインデックス サブテーブル、またはデータ サブテーブルやインデックス サブテーブルの行の連続した範囲(「領域」)を識別することができます。 その場合、Teradata Databaseでは、影響を受けるサブテーブルまたは領域だけをダウンとマークします。 これにより、ダウンしているサブテーブルまたは行にはアクセスする必要がないトランザクションを、データベースのクラッシュや再始動を伴わずに実行できるため、システムのパフォーマンスと可用性が向上します。
DEFRAGMENTでダウンしている領域が検出されると、それらの領域はスキップされ、スキップされた領域の合計の割合が表示されます。
例: DEFRAGMENTコマンドの出力
次の例は、DEFRAGMENTが生成する出力を示しています。
Ferret ==> defrag /y Defrag has been sent to all AMP vprocs in the SCOPE. Type ‘ABORT’ to stop them before completion vproc 0 response Requested Cylinder Range had 5 cylinders placed on the defrag list vproc 1 response Requested Cylinder Range had 9 cylinders placed on the defrag list