REORG INDEX/INDEXES コマンド

REORG INDEXES/INDEXES コマンドは、索引を再編成します。

フラグメント化されていない物理的に連続したページに索引データを再構築することによって、表に定義されたすべての索引を再編成することができます。 データ・パーティション表では、パーティション表で特定の非パーティション索引を再編成すること、もしくは特定のデータ・パーティションですべてのパーティション索引を再編成することができます。

索引節の CLEANUP オプションを指定すると、索引を再作成しないでクリーンアップが実行されます。 表の特定の索引をクリーンアップすることも、表のすべての索引をクリーンアップすることもできます。

このコマンドを宣言済み一時表または作成済み一時表の索引に対して使用することはできません (SQLSTATE 42995)。

制約事項: オンライン索引再編成は、 Db2 pureScale® 環境ではサポートされておらず、 SQL1419Nで失敗します。

範囲

このコマンドは、データベース・パーティション・グループ内のすべてのデータベース・パーティションに影響を与えます。

許可

以下の権限のいずれか。
  • SYSADM または SCHEMAADM
  • SYSCTRL
  • SYSMAINT
  • DBADM
  • SQLADM
  • 表に対する CONTROL 特権

必要な接続

データベース

コマンド構文

Read syntax diagramSkip visual syntax diagramREORGINDEXES ALL FOR TABLEtable-nameINDEXindex-nameFOR TABLEtable-nameIndex clauseTable partitioning clause Database partition clause
Index clause
Read syntax diagramSkip visual syntax diagramALLOW NO ACCESSALLOW WRITE ACCESSALLOW READ ACCESSREBUILDspace-reclaim-options
space-reclaim-options
Read syntax diagramSkip visual syntax diagramCLEANUPALLPAGESRECLAIM EXTENTS
Table partitioning clause
Read syntax diagramSkip visual syntax diagramON DATA PARTITIONpartition-name
Database partition clause
Read syntax diagramSkip visual syntax diagramONDBPARTITIONNUMDBPARTITIONNUMSPartition selection clauseALL DBPARTITIONNUMSEXCEPTDBPARTITIONNUMDBPARTITIONNUMSPartition selection clause)
Partition selection clause
Read syntax diagramSkip visual syntax diagram( ,db-partition-number1TOdb-partition-number2 )

コマンド・パラメーター

INDEXES ALL FOR TABLE table-name
索引を再編成する表を指定します。 表は、ローカルまたはリモート・データベースにあるものです。
INDEX index-name
再編成する個々の索引を指定します。
索引の個別の再編成は、以下のシナリオでサポートされています。
  • ブロック索引でない、データ・パーティション表の非パーティション索引
  • CLEANUP ALL が指定され、RECLAIM EXTENTS が指定されていない場合は、任意の永続表のあらゆる索引
FOR TABLE table-name
索引 index-name が作成される表の名前を指定します。 索引名がデータベースを通じて固有であるなら、このパラメーターはオプションです。

Index clause

ALLOW NO ACCESS
REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表にアクセスできないことを指定します。 パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。

REORG INDEXの場合、索引の再編成中は他のユーザーが表にアクセスできないことを指定します。

ALLOW READ ACCESS
REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表に対して、読み取り専用でアクセスできることを指定します。 ALLOW READ ACCESS モードは、 CLEANUP または RECLAIM EXTENTS オプションまたは ON DATA PARTITION 節が指定されていない限り、パーティション表の REORG INDEXES ではサポートされません。 パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。

REORG INDEXの場合、索引の再編成中に、表に対する読み取り専用アクセスを持つことができることを指定します。

ALLOW WRITE ACCESS
REORG INDEXES の場合、索引が再編成される間に、他のユーザーがその表から読み取ったりそこに書き込んだりできることを指定します。 ALLOW WRITE ACCESS モードは、 CLEANUP または RECLAIM EXTENTS オプションまたは ON DATA PARTITION 節が指定されていない限り、パーティション表ではサポートされません。 パーティション表に対して ON DATA PARTITION 節が指定されている場合、その指定されたパーティションのみがこのアクセス・モード・レベルに制限されます。

REORG INDEXの場合、索引の再編成中に表に対して読み取りおよび書き込みを行うことができることを指定します。

ALLOW WRITE ACCESS モードは、 CLEANUP または RECLAIM EXTENTS オプションが指定されていない限り、マルチディメンション・クラスタリング (MDC) 表、挿入時クラスタリング (ITC) 表、または拡張索引ではサポートされません。

REBUILD パラメーターを指定した場合、 カラム・オーガナイズ 表では ALLOW WRITE ACCESS パラメーターはサポートされません。

REORG INDEXES ALL コマンドで ON DATA PARTITION 節が指定されている場合、以下の項目がデータ・パーティション表に適用されます。
  • 指定されたデータ・パーティションのみがこのアクセス・モード・レベルに制限されます。 指定されたパーティションのパーティション索引が再編成される間に、ユーザーは表の他のパーティションから読み取ったりそこに書き込んだりできます。
    以下の表に、ON DATA PARTITION 節が指定された時にサポートされるアクセス・モードおよび表の他のパーティションで許可される並行アクセスを示します。
    表 1. REORG INDEXES ALL と共に ON DATA PARTITION 節が指定された時にサポートされるアクセス・モードおよび許可される並行アクセス
    アクセス・モード 指定されたパーティションで許可される並行アクセス 他のパーティションで許可される並行アクセス
    ALLOW NO ACCESS アクセスできません 読み取りおよび書き込みアクセス
    ALLOW READ ACCESS 索引が更新されるまでのパーティションにおける読み取り 読み取りおよび書き込みアクセス
    ALLOW WRITE ACCESS 索引が更新されるまでのパーティションにおける読み取りおよび書き込みアクセス 読み取りおよび書き込みアクセス
  • 指定されたパーティションのパーティション索引のみが再編成されます。 非パーティション索引は再編成されません。

    「無効」または「再作成」とマークされた表に非パーティション索引がある場合、これらの索引は再編成前に再作成されます。 それ以外の場合、索引オブジェクトが「無効」または「再作成」とマークされているなら、指定されたパーティションのパーティション索引のみが再編成されるか、または再作成されます。

  • CLEANUP オプションまたは RECLAIM EXTENTS オプションも指定されている場合、指定されたパーティションのパーティション索引のみがクリーンにされます。
以下の表は、パーティションおよび非パーティション表における索引の再編成に対してサポートされるアクセス・モードを示します。
表 2. パーティションおよび非パーティション表における索引の再編成に対してサポートされるアクセス・モード
コマンド 表タイプ Table partitioning clause index (索引) 節に指定されたその他のパラメーター サポートされるアクセス・モード
REORG INDEXES 非パーティション表 適用外 任意
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS2
REORG INDEX 非パーティション表 適用外 CLEANUP ALL
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS
REORG INDEX パーティション表の非パーティション索引 適用外 任意
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS
REORG INDEX パーティション表のパーティション索引 ON DATA PARTITION 節ありまたはなし CLEANUP ALL
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS
REORG INDEXES パーティション表 なし REBUILD (何も指定されていない場合のデフォルト)
ALLOW NO ACCESS 1
REORG INDEXES パーティション表 ON DATA PARTITION REBUILD (何も指定されていない場合のデフォルト)
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS
REORG INDEXES パーティション表 ON DATA PARTITION 節ありまたはなし CLEANUP または RECLAIM EXTENTS を指定
ALLOW NO ACCESS
ALLOW READ ACCESS1
ALLOW WRITE ACCESS
注:
  1. アクセス節が指定されていない場合のデフォルト・モード。
  2. REBUILD パラメーターを指定した場合、カラム・オーガナイズ表では ALLOW WRITE ACCESS はサポートされません。

ALLOW READ ACCESS または ALLOW WRITE ACCESS オプションを使用して、索引の再編成中に、他のトランザクションが表に対して読み取り専用アクセスまたは読み取り/書き込みアクセスを行えるようにします。 索引の再編成されたコピーを使用できる期間中に索引を再作成する場合、表へのアクセスは許可されません。

REBUILD
REBUILD オプションがデフォルトです。このオプションは、CLEANUP 節および CONVERT 節が指定されていない場合の以前のリリースにおける索引再編成で提供されるのと同じ機能を表します。 索引再編成の REBUILD オプションにより、物理的に連続したページに索引データが再作成されます。 デフォルトのアクセス・モードは表タイプによって異なります。

Space-reclaim-options

CLEANUP
CLEANUP が要求されると、REBUILD ではなくクリーンアップが実行されます。 索引は再作成されません。解放されたページはこの表に定義された索引だけが再使用できます。
ALL
コミット済みの疑似削除済みキーおよび疑似空白ページを除去して、 索引をクリーンアップすることを指定します。

CLEANUP ALL オプションはコミット済み疑似空白ページを解放して、コミット済み疑似削除済みキーを疑似空白ではないページから除去します。 また、このオプションは、マージ後のリーフ・ページのフリー・スペースが PCTFREE 以上になる場合に、隣接する複数のリーフ・ページをマージしようとします。 PCTFREE は、索引作成時に索引に対して定義するフリー・スペースのパーセントです。 デフォルトの PCTFREE は 10% です。 2 つのページがマージ可能な場合、そのうちの 1 つのページが解放されます。 疑似空白ページにあるキーを除く、 索引内の疑似削除済みキーの数を調べるには、RUNSTATS を実行してから SYSCAT.INDEXES の NUMRIDS DELETED を SELECT します。 ALL オプションは、NUMRIDS DELETED および NUM EMPTY LEAFS がコミットされたと判別された場合に、それらをクリーンアップします。

PAGES
コミット済みの疑似空白ページを索引ツリーから除去することを指定します。 このステップは、疑似空白ではないページ上の疑似削除済みキーをクリーンアップしません。 これは疑似空白リーフ・ページだけをチェックするので、 ほとんどの場合に ALL オプションを使用するよりも相当速くなります。

CLEANUP PAGES オプションは、コミット済み疑似空白ページを検索して解放します。 コミット済み疑似空白ページとは、ページ上のすべてのキーに削除済みのマークが付いていて、 それらすべての削除がコミット済みとして知られているページのことです。 索引内の疑似空白ページの数は、 RUNSTATS を実行し、 SYSCAT.INDEXES。 PAGES オプションは、コミットされたと判別された NUM EMPTY LEAFS をクリーンアップします。

RECLAIM EXTENTS
再編成する索引を指定し、使用されていないエクステントを再利用します。 このアクションによって、索引オブジェクト内の索引ページを移動して空エクステントが作成されます。 その後、このステップは、それらの空エクステントを索引オブジェクトによる排他使用から解放し、表スペース内の他のデータベース・オブジェクトがそのスペースを使用できるようにします。 エクステントは、索引オブジェクトから表スペースに戻されて再利用されます。 ALLOW READ ACCESS はデフォルトですが、すべてのアクセス・モードがサポートされています。

Table partitioning clause

ON DATA PARTITION partition-name
データ・パーティション表では、再編成するデータ・パーティションを指定します。

Db2® 9.7 フィックスパック 1 以降のリリースでは、この節を REORG INDEXES ALL コマンドとともに使用して、特定のパーティションのパーティション索引を再編成し、 REORG TABLE コマンドを使用して特定のパーティションのデータを再編成することができます。

パーティション表に対する REORG TABLE または REORG INDEXES ALL コマンドでこの節を使用するときに、パーティション partition-name が指定した表にない場合、再編成は失敗し、理由コード 1 と共に SQL2222N を戻します。 パーティション partition-name がアタッチまたはデタッチ状態の場合、再編成は失敗し、理由コード 3 と共に SQL2222N を戻します。

非パーティション索引に対して ON DATA PARTITION 節を指定して REORG INDEX コマンドを実行すると、再編成は失敗し、 SQL2222N と理由コード 2 が戻されます。 CLEANUP ALL 節のない非パーティション索引に対して REORG INDEX コマンドが実行された場合、または RECLAIM 節も指定された場合、再編成は失敗し、理由コード 89 とともに SQL0270N が戻されます。

データベース・ パーティション

ON DBPARTITIONNUM | ON DBPARTITIONNUMS
データベース・パーティションのセットに対して操作を実行します。
ALL DBPARTITIONNUMS
db2nodes.cfg ファイルに指定されているすべてのデータベース・パーティションに対して操作を実行することを指定します。 データベース・パーティション節が指定されていない場合、このオプションがデフォルトです。
EXCEPT
データベース・パーティション・リストに指定されているパーティションを除き、 db2nodes.cfg ファイルに指定されているすべてのデータベース・パーティションに対して操作を実行することを指定します。

Partition selection clause

db-partition-number1
データベース・パーティション・リスト内のデータベース・パーティション番号を指定します。
db-partition-number2
2 番目のデータベース・パーティション番号を指定し、 db-partition-number1 から db-partition-number2 までのすべてのデータベース・パーティションがデータベース・パーティション・リストに含まれるようにします。

他のトランザクションに表の読み取りおよび更新を許可しながら、 EMPLOYEE 表にあるすべての索引内の疑似削除済みキーおよび疑似空白ページをクリーンアップするには、 次のように入力します。
   db2 reorg indexes all for table homer.employee allow write 
    access cleanup
他のトランザクションに表の読み取りおよび更新を許可しながら、 EMPLOYEE 表にあるすべての索引内の疑似空白ページをクリーンアップするには、次のように入力します。
   db2 reorg indexes all for table homer.employee allow write 
    access cleanup pages
データ・パーティション EMPLOYEE 表のデータ・パーティション PART1 の索引 EMPID にある疑似削除済みキーおよび疑似空白ページをクリーンアップすると同時に、他のトランザクションにその表の読み取りおよび更新を許可するには、次のように入力します。
   db2 reorg index EMPID on table HOMER.EMPLOYEE 
    cleanup all on data partition PART1

使用上の注意

制約事項:
  • REORG ユーティリティーでは、ニックネームの使用はサポートされません。
  • イベント・モニターの書き込み先である表に対して 再編成を実行する場合は、その前にその表に関係するイベント・モニターを非活動化しておく必要があります。
  • データ・パーティション表では、以下のようになります。
    • 再編成では、アタッチまたはデタッチ操作のため、制限状態にあるデータ・パーティションがスキップされます。 ON DATA PARTITION 節が指定されている場合、そのパーティションは完全にアクセス可能でなければなりません。
    • ALLOW NO ACCESS モードが使用されているときに索引の再編成中にエラーが発生した場合、表の一部の索引が無効のままになる可能性があります。 表の非パーティション RID 索引については、障害発生時点で再編成中の索引のみが無効のままになります。 非パーティション・ブロック索引がある MDC 表については、エラーが発生した場合、1 つ以上のブロック索引が無効のままになる可能性があります。 パーティション索引を持つ MDC 表または ITC 表の場合は、再編成されたデータ・パーティションの索引オブジェクトのみが無効になります。 無効のマークが付いたすべての索引は、次回表またはデータ・パーティションにアクセスしたときに再作成されます。

表および索引の再編成の現在の進行状況は、データベース・アクティビティーの履歴ファイルに書き込まれます。 履歴ファイルには、 それぞれの再編成イベントに関するレコードが含まれます。 このファイルを表示するには、 再編成している表を含むデータベースに対して LIST HISTORY コマンドを実行します。

このほか、表スナップショットを使用して、表および索引の再編成の進行状況をモニターすることもできます。 表の再編成のモニター・データは、 「データベース・モニター表スイッチ (Database Monitor Table Switch)」の設定値に関係なく記録されます。

エラーが生じた場合、SQLCA ダンプが履歴ファイルに書き込まれます。

索引表を何度も変更すると、索引内のデータがフラグメント化し、索引ページのプリフェッチの効果が限定される可能性があります。 索引のフラグメント化を解決するには、索引を再構築する再編成が必要です。 ただし、このフラグメント化の影響は、先読みプリフェッチが導入されたことで最小限に抑えられています。

再編成操作では、操作のタイプ (INPLACE または CLASSIC) と、ALLOW READ アクセスまたは ALLOW WRITE オプションが指定されているかどうかに応じて、さまざまなロックが必要になることに注意してください。 ロック待機状態は、従来の方法を使用してモニターできます。「ロック待機問題の診断 (Diagnosing a lock wait problem)」を参照してください。

REORG が MDC 表の索引を再作成する場合、 Full_Block ヒント・ビットは設定されません。 Full_Block ヒントが設定されていないため、REORG の完了後に既存のディメンション値から行を挿入し、 DB2_TRUST_MDC_BLOCK_FULL_HINT レジストリー変数をオンにすると、挿入のパフォーマンスが低下する可能性があります。 挿入のパフォーマンスは、ディメンション値の挿入が完了した後、そのディメンション値ごとに自動的に向上します。 詳しくは、 DB2_TRUST_MDC_BLOCK_FULL_HINT パフォーマンス変数を参照してください。

Db2 9.7 フィックスパック 1 以降では、データ・パーティション表に対して REORG INDEXES ALL コマンドを発行して、パーティション上の異なるデータ・パーティションまたはパーティション索引を同時に再編成することができます。 幾つかのデータ・パーティションを同時に再編成したり、1 つのパーティションで複数のパーティション索引を再編成したりする場合、ユーザーは無関係のパーティションにはアクセスできますが、影響を受けるパーティションにはアクセスできません。 同一表に対して同時に操作する複数の REORG コマンドを発行するには、以下の基準をすべて満たす必要があります。
  • REORG コマンドは、 ON DATA PARTITION 節を使用して異なるパーティションを指定する必要があります。
  • REORG コマンドは、ALLOW NO ACCESS モードを使用して、データ・パーティションに対するアクセスを制限しなければならない。
非パーティション索引がなく (システムが生成した XML パス索引を除く)、パーティション P1、P2、P3、P4 を使用するパーティション表 T1 の場合、以下の複数の REORG コマンドを並行して実行することができます。
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P1
REORG TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P2
REORG INDEXES ALL FOR TABLE T1 ALLOW NO ACCESS ON DATA PARTITION P3
並行 REORG コマンドを使用する場合、以下のような操作はサポートされません。
  • 表に ON DATA PARTITION 節を指定せずに REORG コマンドを使用する。
  • データ・パーティションを追加、アタッチ、またはデタッチするのに、表で ALTER TABLE ステートメントを使用する。
  • データを表にロードする。
  • 表を含むオンライン・バックアップを実行する。

表がいくつかのデータベース・パーティションに分散している場合、影響を受けるデータベース・パーティションのいずれかで表または索引の再編成が失敗すると、失敗したデータベース・パーティションでのみ表または索引の再編成がロールバックされます。

再編成が失敗した場合に一時ファイルを削除しないでください。 データベース・マネージャー は、これらのファイルを使用してデータベースをリカバリーします。

XML データの索引は、 REORG TABLE コマンドによって再作成される場合があります。 詳しくは、 XML データの索引の再作成を参照してください。

ページ・マップ索引は、 カラム・オーガナイズ 表内のページを追跡するために内部で使用されます。 カラム・オーガナイズ 表に索引を作成するときに、索引スキャン中に使用される変更状態索引が作成される場合があります。 カラム・オーガナイズ 表のスペース管理には、ページ・マップ索引や変更状態索引など、索引によって使用されるスペースの管理が含まれます。 表の再編成によって、ページ・マップ索引内に疑似削除済みキーが生成されます。 更新操作を行うと、変更状態索引内に疑似削除済みキーが生成されます。 更新操作および削除操作を行うと、通常の索引内に疑似削除済みキーが生成されます。 疑似削除されたキーをクリーンアップするために、 CLEANUP パラメーターと RECLAIM EXTENTS パラメーターを指定して REORG INDEXES コマンドを実行するか、 CLEANUP パラメーターを指定して REORG INDEXES コマンドを実行することを検討してください。 表自動保守が有効になっている場合は、この機能によって、索引に対するクリーンアップとスペース再利用の処理が行われます。