16 自動SecureFiles縮小

Oracle DatabaseのSecureFiles縮小機能では、SecureFiles LOBセグメント内の未使用領域を解放し、それが含まれている表領域にその領域を再度解放するための、手動方式と自動方式が提供されます。この章では、Oracle Databaseで自動SecureFiles縮小という自動方式を使用する方法について説明します。

16.1 手動SecureFiles縮小について

ALTER TABLE ... SHRINK SPACE文を使用して、SecureFiles LOBセグメントを手動で縮小します。また、縮小するSecureFiles LOBセグメントを決定する前に、セグメント・アドバイザやPL/SQLプロシージャ(たとえば、DBMS_SPACE.SPACE_USAGE)などのツールを使用して、SecureFiles領域の使用量について情報を返すことができます。

手動縮小方法を選択する場合は、次の点が重要です:

  • 手動SecureFiles縮小操作は、操作の一部がオフラインであるオンラインDDLです。オフラインとは、重要なセクションの縮小アクティビティが終了するまで同時DMLがブロックされることを意味します。同時DML文はORA-54で失敗しませんが、ブロックされます。

  • 手動SecureFiles縮小操作では、UNDO保存の種類が無視され、保存が「なし」であるかのように処理されます。ユーザーは、縮小操作を起動した後にLOB保存機能で通常提供される保証を期待できません。ORA-1555 スナップショットが古すぎますのエラー・メッセージが問合せに表示される場合があります。これが問題となる場合は、縮小操作を慎重に行ってください。

リリース21c以降のSecureFile LOBセグメントでは、shrink_clauseを使用します。shrink_clauseを起動するには、次の2つの方法があります:
  1. 次のコマンドは、指定されたLOB列およびそのすべてのパーティションを対象とします。

    ALTER TABLE <table_name> MODIFY LOB <lob_column> SHRINK SPACE
  2. 次のコマンドは、指定された表内のすべてのLOB列およびそのパーティションに対して縮小操作をカスケードします。

    ALTER TABLE <table_name> SHRINK SPACE CASCADE

16.2 自動SecureFiles縮小について

SecureFiles LOBセグメントは、データベース内の領域の最大コンシューマになる可能性があります。管理者が、各SecureFiles LOBセグメントが縮小されたかどうかの確認に時間を使えない場合があります。自動SecureFiles縮小では、一連の基準に基づいて縮小するSecureFiles LOBセグメントを自動的に選択できるようにするフレームワークを使用し、バックグラウンドで自動SecureFiles縮小を実行します。

自動SecureFiles縮小は、同時ワークロードに対する機能およびパフォーマンスの影響を最小限に抑えるように設計されています。縮小はSecureFiles LOBセグメントに対して自動的に実行されますが、そのセグメントに関連するすべてのDML文およびDDL文は成功します。SecureFiles LOBセグメント内の領域は徐々に解放され、パフォーマンスへの影響は最小限に抑えられます。

自動SecureFiles縮小は、BasicFiles LOBおよびインラインSecureFiles LOBに対しては効果がありません。

16.3 自動SecureFiles縮小の機能

自動SecureFiles縮小には次の機能があります。

データベースによる管理

データベースは、自動SecureFiles縮小のバックグラウンド実行およびリソース管理インフラストラクチャを提供します。また、データベースにより、システムで決定された間隔で、バインドされたランタイム内で自動的に縮小タスクが実行されます。

事前割当てとの統合

自動SecureFiles縮小は、パフォーマンスに影響を与えることなく、事前割当てとシームレスに統合されます。自動SecureFiles縮小では、最近事前割当てされたSecureFiles LOBセグメントは回避されます。セグメントの事前割当ては、空き領域の需要が高いセグメントについては、バックグラウンドで実行されます。

DDLおよびDMLとの使用

自動SecureFiles縮小では、アイドル・セグメントのみが対象となり、アクティブなSecureFiles LOBセグメントはスキップされます。バックグラウンドでの自動SecureFiles縮小の動作中でも、ユーザー主導のDDL文およびDML文は失敗せず、そのパフォーマンスへの影響は最小限に抑えられます。SecureFiles LOBセグメントのSecureFiles自動縮小がロックされた行に遭遇した場合、ロックされた行はスキップされます。これは、ロックされた行がDMLアクティビティを示しているか、ロックされた行を待機しているとユーザー・トランザクションでデッドロックが発生する可能性があるためです。自動SecureFiles縮小は、ユーザー・トランザクションとのデッドロックを回避するために、常にNOWAITモードで行ロックを取得します。

アイドルLOBセグメントのみが対象

自動SecureFiles縮小では、不要なブロック・アクセスを防ぐために、システム・グローバル領域(SGA)にある使用可能な情報に基づいて、SecureFiles LOBセグメントが絞り込まれます。自動SecureFiles縮小では、アイドルSecureFiles LOBセグメントのみが選択され、アクティブなLOBセグメントがスキップされるため、アクティブなSecureFiles LOBセグメントに関するパフォーマンスへの影響が最小限に抑えられます。

すべてのSecureFiles LOBセグメントをカバー

自動SecureFiles縮小タスクでは、複数の間隔にわたり、PDB内のすべてのSecureFiles LOBセグメントが処理されます。これには、ユーザーが作成したLOBセグメント、およびJSONやDBFSなどの機能を使用して作成されたSecureFiles LOBセグメントが含まれます。

縮小の反復実行

自動SecureFiles縮小では、選択したSecureFiles LOBセグメント内のすべての空き領域が一度に解放されるわけではありません。かわりに、自動SecureFiles縮小タスクでは、縮小コール(反復)ごとに、適度な量の領域が解放されます。トリクルしきい値により、反復ごとに、縮小する領域の量を定義します。時間の経過とともに、アイドルSecureFiles LOBセグメントの空き領域の量が、事前割当て用に指定された最小値に近づきます。

バックグラウンドでの実行

自動SecureFiles縮小に関わるすべてのステップ(縮小するSecureFiles LOBセグメントの選択など)は、バックグラウンドで実行されます。自動SecureFiles縮小を有効化すると、それが、データベース・インスタンスの起動時に有効になります。自動SecureFiles縮小の動作方法に関するディレクティブは不要です。

UNDO保存の尊重

自動SecureFiles縮小では、UNDO保存期間が考慮されます。この機能では、問合せがUNDO保存期間内に失敗することは許容されていません。これは、影響を受けるSecureFiles LOBセグメントが、自動SecureFiles縮小タスクの一部として解放、再配置または再利用されているためです。期限切れでないブロックは、UNDO保存時間の後にのみ解放されます。

16.4 SecureFiles縮小およびUNDO保存

この項では、自動縮小機能で様々な種類のUNDO保存がどのように処理されるかについて説明します。

自動SecureFile縮小機能の一部として、エクステントの使用済ブロックが再配置され、エクステントが表領域に解放されます。エクステントが表領域に解放されると、再使用して上書きできます。縮小中のエクステントの解放および再利用により、UNDO保存で期待される動作が変わる場合があります。

自動SecureFiles縮小は、SecureFiles LOBセグメント内のデータを移動して空き領域を作成します。この機能は、最小保存要件が満たされるまで領域を再利用しないことで、LOB保存設定を順守します。実際には、同時問合せは、アイドル・セグメントに対する同じ問合せと比較して「ORA-1555 スナップショットが古すぎます」が発生する頻度が高くなる可能性があります。Autonomous Databaseの自動SecureFiles縮小では、RETENTIONパラメータをMAXに設定して構成されたSecureFiles LOBセグメントがスキップされます。

16.5 自動SecureFiles縮小の有効化

自動SecureFiles縮小は、アウトラインSecureFile LOBに影響します。自動SecureFiles縮小は、BasicFiles LOBおよびインラインSecureFiles LOBに対しては効果がありません。

自動SecureFiles縮小は、デフォルトでは有効になっていません。

  • オンプレミス環境では、次のコマンドを実行して、自動SecureFiles縮小機能を有効にします。
    exec DBMS_SPACE.SECUREFILE_SHRINK_ENABLE();

Autonomous Cloud環境では、システム管理者に連絡して、自動SecureFiles縮小を有効にしてください。

16.6 自動SecureFiles縮小の無効化

デフォルトでは、自動SecureFiles縮小機能は無効になっています。

  • オンプレミス環境では、次のコマンドを実行して、自動SecureFiles縮小機能を無効にします。
    exec DBMS_SPACE.SECUREFILE_SHRINK_DISABLE();

Autonomous Cloud環境では、システム管理者に連絡して、自動SecureFiles縮小を無効にしてください。

16.7 目標と制限

自動SecureFiles縮小は、最適な動作のために一連の目標および制限に従います。

16.7.1 自動SecureFiles縮小の目標

自動SecureFiles縮小の目標により、1回の自動縮小実行で解放する必要がある、領域の量が決まります。

手動縮小では、縮小コマンドによって、空き領域がなくなるまで領域の解放が続行されます。自動SecureFiles縮小では、縮小実行ごとに縮小目標が設定されます。この目標は次の条件に基づいています。

  • 自動SecureFiles縮小タスクで解放可能なセグメント領域の最小限度(これを下回ると解放できない)を示す、事前割当てしきい値。

  • 自動SecureFiles縮小がLOBセグメントの領域を1回の反復で解放できる最大制限を指定するトリクルしきい値。

16.7.1.1 事前割当しきい値

事前割当てしきい値は、LOBセグメントについて、目標となる最小空き領域を計算するために使用されます。

事前割当てしきい値は、LOBセグメント・サイズに対する空き領域の割合で表されます。たとえば、2 TBのLOBセグメントの場合、空き領域の最小量は20 GB (2 TB * 1%)です。実際の空き領域が事前割当てしきい値より少ない場合は、事前割当てがトリガーされ、セグメントにエクステントが追加されます。デフォルトでは、期限切れでない領域は空き領域とみなされません。

ノート:

自動SecureFiles縮小では、領域は、LOBセグメントの事前割当て最小しきい値より少ない場合は解放されません。

表16-1に、セグメント・サイズごとのデフォルトの事前割当てしきい値を示します。

ノート:

将来のOracle Databaseリリースでは、最適化を使用してそれらのしきい値を調整できます。

表16-1 事前割当てしきい値

セグメント・サイズ 実際のしきい値 最小空き領域

<= 1 GB

10%

100 MB

<= 10 GB

5%

500 MB

<= 100 GB

2%

2 GB

> 100 GB

1%

1 GB

16.7.1.2 自動SecureFiles縮小のトリクルしきい値

トリクルしきい値により、自動縮小の反復1回で解放される、セグメント当たりの最大領域量を制御します。

LOBセグメントで縮小を実行すると、領域が増分的に解放されます。したがって、トリクルしきい値は縮小の増分量であり、同時に実行されているDML文およびDDL文のパフォーマンスに、待機時間の増加による顕著な影響を与えずに、限られた領域を反復処理で縮小タスクが解放できるようにします。

ノート:

自動SecureFiles縮小では、領域は、LOBセグメントの事前割当て最小しきい値より少ない場合は解放されません。

16.7.2 LOBセグメントのアイドル時間制限

LOBセグメントのアイドル時間制限とは、LOBセグメントがアイドル状態になってから縮小を開始できるようになるまでの最短時間限度です。

LOBセグメントのアイドル時間制限により、LOBセグメントが自動SecureFiles縮小の対象となるまでのアイドル状態である必要がある最短時間を指定します。アイドルLOBセグメントは、過去N時間にユーザー主導のDML文も事前割当てアクティビティもないセグメントと定義付けられています。LOBセグメントのアイドル時間制限により、時間数Nを定義します。LOBセグメントのアイドル時間制限のデフォルト値は1440分(24時間)です。

16.8 縮小するSecureFiles LOBセグメントの選択基準

縮小するSecureFiles LOBセグメントを選択するために自動SecureFiles縮小で使用される基準を次に示します。

自動SecureFiles縮小タスクでは、縮小するSecureFiles LOBセグメントを選択するときに、次のSecureFiles LOBセグメントが除外されます:

  • LOBセグメントのアイドル時間制限によりアイドル・セグメントではないとみなされたSecureFiles LOBセグメント。

  • 余剰の空き領域が事前割当てしきい値より多くないSecureFiles LOBセグメント。

  • RETENTION MAXが設定されているSecureFiles LOBセグメント。これは、そのセグメントで、期限切れでないブロックが、可能なかぎり多く保持されるということです。

  • 現在縮小中のSecureFiles LOBセグメント。

  • LOB保存要件に必要なくなった期限切れの空き領域が十分にないSecureFiles LOBセグメント。LOB保存に引き続き必要な領域は、使用済領域として扱われます。

  • 前の縮小タスクが失敗したSecureFiles LOBセグメント。前の縮小コールで、そのSecureFiles LOBセグメントの領域の解放が失敗しています。自動SecureFiles縮小では、以前に縮小できなかったLOBセグメントが特定され、そのようなセグメントが回避されます。

16.9 自動SecureFiles縮小タスク

自動SecureFiles縮小では、SecureFiles LOBセグメントの縮小を達成するための一連のステップが実行されます。

有効になっている場合、縮小タスクは、AutoTaskで実行されるバックグラウンド・アクションのインスタンスの1つとして実行されます。このタスクは、30分ごとに実行され、次のステップを実行します。

  1. 縮小タスクには、タスク開始時には60分あります。タスクの進行に合わせて、これまで費やした時間と、縮小コールの平均期間が両方追跡されます。後者を使用して、次回の縮小コールにかかる時間が予測されます。もう1回コールするには残り時間が足りない場合、縮小タスクは終了されます。縮小コールは、60分間という目標を超えると終了されます。
  2. 自動SecureFiles縮小では、内部カタログ表から次のバッチ分のSecureFiles LOBセグメントがフェッチされます(これはオブジェクト識別子順になっています)。前回の縮小タスクでの最後のオブジェクト識別子が、次回の縮小タスクの開始点として使用されます。
  3. 自動SecureFiles縮小により、SecureFiles LOBセグメントの選択基準から基準フィルタが適用されて、縮小タスクの対象外のセグメントが除去されます。
  4. 対象になるセグメントが見つかると、縮小タスクで、そのセグメントに対する作業を開始できるようになります。
  5. 縮小を開始する前に、縮小目標が計算されます。縮小目標は、事前割当てしきい値、および自動SecureFiles縮小のトリクルしきい値に基づいています。
  6. 自動SecureFiles縮小により、縮小コマンドが実行されます。ALTER TABLE ... SHRINK SPACEコマンドは、OCIインタフェースを使用して実行されます。
  7. 自動SecureFiles縮小により、次回の縮小のタイムスタンプが更新されます。このタイムスタンプでは、自動SecureFiles縮小でこのSecureFiles LOBセグメントを再度選択できる最早時間が示されます。領域が正常に解放された場合、このタイムスタンプには現在時間が使用されます。そうでない場合は、縮小に将来の時間が割り当てられます。縮小に成功しなかった場合は、自動SecureFiles縮小で将来の縮小タスクにおいて同じセグメントが選択されないように、ペナルティ時間が課されます。

16.10 進行状況の確認

自動SecureFiles縮小の結果を確認する最も簡単な方法は、データベース内のSecureFiles LOBセグメントの合計サイズを計算することです。あるいは、V$SECUREFILE_SHRINK表を使用してマイクロ・レベルで領域節約を確認することもできます。この表では、縮小されたSecureFiles LOBセグメントごとに1行がレポートされます。

関連項目:

V$SECUREFILE_SHRINK: 前の縮小コールの結果を表示します。