FerretユーティリティのPACKDISKコマンドは、各シリンダにSCOPEコマンドが定義する範囲内の比率の空き領域を残しながら、ディスク全体または個別テーブルの内容を再構成します。PACKDISKはデフォルトの空き領域比率か、コマンドの一部として定義されている新しい比率を使用して、ディスク全体かテーブルをパッキングします。
PACKDISKの許容される範囲はvprocまたはテーブルですが、その両方ではありません。
システムはデータ ブロックをシリンダ間で自動的に移動し、必要な数の空きシリンダが使用可能になると停止します。この操作は、空きシリンダの数が危機的に少なくなると実行されます。PACKDISKコマンドを使用して、パッキングする時点が早くなるよう強制できます。
空き領域のパーセンテージの指定について
PACKDISKはディスク全体または単一テーブルをパッキングしますが、その際、後の挿入および更新操作のために、オブジェクトが占有しているシリンダの指定された比率の領域を空のままにします。これは、空き領域比率の制限の設定についてに説明されているツールを使用して指定するFSPです。
PACKDISK範囲の設定について
FerretユーティリティのPACKDISKコマンドは、各シリンダにSCOPEコマンドが定義する範囲内の比率の空き領域を残しながら、ディスク全体または個別テーブルの内容を再構成します。
PACKDISKの実行について
PACKDISKを実行するには、Ferretパーティションのコマンド ウィンドウに入力します。例えば、次のようにします。
PACKDISK FREESPACEPERCENT = 25(25はシリンダの空き領域の割合に相当します)。コマンドは大文字、小文字、またはその両方の組み合わせで入力します。
PACKDISKの停止について
PACKDISKを停止するには、ABORTと入力します
パッキングは、論理シリンダ全体に適用され、これらの各シリンダの個々のデータ ブロック内の領域には適用されません。データ ブロック サイズは、PACKDISK操作の前も後も変わりません。空き領域の管理も参照してください。
断片化解除を使用したシリンダの断片化の解消について
繰り返しシリンダの断片化を解消できます。FerretユーティリティDEFRAGMENTコマンドを使用して、SCOPEオプションに応じてAMPかシステムのどちらかでシリンダの断片化を解消します。
AutoCylPackおよびMiniCylPackについて
AutoCylPack
AutoCylPack (自動バックグランド シリンダ パッキング)はシリンダ上の領域を管理し、使用状況が高いまたは低いシリンダを見つけ、ユーザー定義FSP (Free Space Percent)つまりAutoCylPackが将来のテーブルの増大を考慮してデータの空きを残した、シリンダ内のストレージ領域の割合にまで戻します。
AutoCylPackのシステム全体のデフォルト値があります。CREATE TABLEやALTER TABLE文でFSP句を指定することにより、テーブル単位でオーバーライドできます。
AutoCylPackは、I/Oを発行するバックグラウンド タスクとして動作しますが、影響レベルを調整できます。AutoCylpackをサポートするDBS制御フィールドについては、<Teradata Vantage™ - データベース ユーティリティ、B035-1102>を参照してください。
性能
- MiniCylPackが動作する機会。MiniCylPackはシリンダ全体の再利用に厳密に関係します。
- ユーザーが通常のFerret PACKDISK処理を実行することが必要になる状況。
PACKDISKをテーブル上で実行できます。一定範囲のテーブルやシステム全体、フォアグラウンド タスクの性能、したがってシステム性能に影響があります。
- システム性能は向上します。これはシリンダ インデックス率が高いデータ ブロックがあり、シリンダ読み取りがさらに効果的に実行されるためです。読み取る、占有されていないセクターが減ります。
- テーブルが少数のシリンダを占有します。これにより他に使用できるシリンダが増えます。
MiniCylPack
MiniCylPackは、論理シーケンス中のデータ ブロックをシリンダからシリンダに移動し、使用可能な空きシリンダの必要数が確保された時点で、処理が停止されます。
1つのシリンダが完全に空になるまでこのプロセスは続けられます。マスター インデックスは、前回MiniCylPackが完了した地点から、次に必要なMiniCylPackを開始します。
Teradata Databaseファイル システムは、空きシリンダ数がMiniCylPackLowCylProdで設定されている値を下回った場合に、MiniCylPackを開始します。デフォルト値は10です。
ファイル情報ブロック(FIB)は、最後に割り振られた5つのシリンダの履歴を保存することにより、これらに対するMiniCylPackの実行を回避します。
MiniCylPackを起動する空きシリンダしきい値を指定するためには、DBS制御(<Teradata Vantage™ - データベース ユーティリティ、B035-1102>の「MiniCylPackLowCylProd」を参照)を使用します。システムで空きシリンダが必要になり、その際に空きシリンダがない場合には、自動的にMiniCylPackが実行されます。
データ ブロックの移行について
- 直前または直後のシリンダにブロックを移行して領域を使用可能にすることができる場合は、移動する必要のあるブロック数が少ないほうの方向を選びます。
ブロック数が同じ場合は、空きセクター数の多いほうのシリンダへの方向を選びます。
- 手順1で目的のセクターが空かなかった場合、別の方向へのブロックの移行を試します。
- 新規のシリンダを割り振らないと領域を設けられない場合は、新規のシリンダを割り振ります。新規のシリンダを追加する望ましい位置は次のとおりです。
- 永久テーブルの場合は、現在のシリンダの前。
- スプール テーブルの場合とFastLoadの実行中は、現在のシリンダの後。
順方向または逆方向のどちらへ移行するかで、ブロック数が異なることがあります。システムによって移行対象とみなされるブロックが異なる可能性があるからです。
シリンダ内のキー範囲に対する制約により、逆方向への移行では、システムは最小のキーを持つテーブルと行の順に移行する必要があります。順方向への移行では、最大キーをもつテーブルと行の順に移行されなければなりません。
ソートや復元などの特別用途にも対応できるよう、シリンダからシリンダへのブロックの移行に対してはシステムは特別ルールに従っています。これらの特別なルールは、多少変則的に運用される場合もあります。例えば、追加の必要があると予測した以上のデータ ブロックの移動や、移行するデータ ブロック数を決めるためのシリンダでのサブテーブルの中断の検出などがこれに該当します。
性能
シリンダのパッキング自体が性能に与える影響はわずかですが、多くの場合、性能に影響を与える条件やイベントが付随します。Teradata Databaseファイル システムがMiniCylPackを実行すると、その操作によって正確に1つのシリンダが解放されます。
シリンダ パック操作そのものは、空きシリンダを必要とするジョブを所有するユーザーの優先順位どおりに実行します。シリンダ パッキング操作は、書き込み操作の実行のための領域を回復するためにシステムが実行できる最後の手順であり、システムで領域が不足しているということを示します。
スプール使用量の非常に高い問合わせまたは問合わせグループが、使用可能な空き領域を使い果たすような場合にも、一時的な措置としてcylpackが必要になることもあります。これは、望ましい状況とはいえません。
- AutoCylPack を有効にし(まだ有効にしていない場合)、CREATE TABLE やALTER TABLE 文を使用して読み取り専用テーブルでFSP に0% を指定する。
- Ferret PACKDISKコマンドを実行する。
エラー コード
MiniCylPackは自動的に実行され、システムの領域が不足しかけていることを知らせる警告として機能します。密にデータを詰め込むと、いずれシリンダの割り振りが必要になり、MiniCylPackが何度も起動されることになります。
MiniCylPackは、次のようなエラー コード付きでSoftware_Event_LogVに記録されます。
コード | 説明 |
---|---|
340514100 | DBS制御に設定されているしきい値で実行されたMiniCylPackのサマリー。 |
340514200 | 処理中にMiniCylPackが発生し、タスクがその完了を待機していた。 |
340514300 | システムはMiniCylPackでシリンダを解放できなかった。MiniCylPackは失敗しました。これは、システムが満杯になりつつあるか、またはシリンダのしきい値が不当に高く設定されすぎていることを意味します。このエラー コードは直ちに調査が必要です。 |
340514200または340514300メッセージが何度も出る場合、たいていはすべてのAMPにおけるスプール ファイルの所要量が大きいために構成上の問題が起きていることを示します。スプール所要量を下げない限り、すべてのAMPでMiniCylPackが実行されることになります。そのような場合、実行中のすべてのリクエストが影響を受けます。
テーブル データにスキューがあると、Teradata Databaseがディスク領域の大半を使い果たしているわけではなくても、MiniCylPackが起きることがあります。