Question & Answer
Question
再編成 (REORG) で利用される一時表スペースを指定することは可能でしょうか。可能な場合は指定方法を教えてください。 また、どのくらいの一時表領域のサイズが必要か教えてください。
Answer
再編成方式やフェーズによって、一時スペースとして使われる表スペースや必要なサイズは異なります。
REORG TABLE コマンド
- オフライン再編成 (クラシック再編成) の場合
REORG TABLE コマンドで INPLACE オプションを指定しない場合、オフライン再編成が実行されます。 オフライン再編成では、表の再編成に続いて索引再作成が行われます。
この項目ではオフライン再編成の表再編成フェーズについて説明します。索引再作成フェーズについては c を参照してください。オフライン表再編成はデータ・オブジェクトを再編成し、このとき以下の一時表領域を使用します。- 表の一時コピー (シャドー) 領域
- クラスタリング再編成のソート領域
1 は表と同程度、2 は表と同程度から 2 倍のサイズを必要とする可能性があるため、最大で表の 3 倍の一時領域が要求されることがあります。
クラスタリング再編成でソート領域を節約したい場合、INDEXSCAN オプションが利用できます。(ただし余分に発生する索引スキャンのため、再編成のパフォーマンスが低下する場合があります。) クラスタリング再編成は、表にクラスタリング索引が定義されている場合、もしくは REORG TABLE コマンドの INDEX オプションで索引を指定している場合に実行されます。
各オプションの概要は次の通りです。- USE tbspace-name
再編成されている表の一時コピーを保管する SYSTEM TEMPORARY 表スペースの名前を指定します。 表スペースの名前を指定しない場合、データベース・マネージャーは、 再編成しようとする表を含む表スペースにその表の作業用コピーを保管します。 - INDEX index-name
表を再編成する際に使用する索引を指定します。 データベース・マネージャーは、再編成している表のレコードを物理的に再配列するために索引を使用します。 - INDEXSCAN
クラスタリング REORG では、索引スキャンを使用して表レコードが再配列されます。 デフォルトでは、必要に応じて TEMPORARY 表スペースを使用しながら表をスキャンし、結果をソートして表を再編成します。
- オンライン再編成の場合
REORG TABLE コマンドで INPLACE オプションを指定した場合、オンライン再編成が実行されます。
オンライン再編成では索引の再作成は行われません。
オンライン再編成は表に割り当て済みのエクステント内で再配置を行うため、一時スペースを必要としません。
- 索引再編成の場合
オフライン再編成で実行される索引再作成や、REORG INDEXES コマンドで実行される索引再作成では、データをソートするために一時表領域を必要とします。
索引自体は既存の索引オブジェクトと同じ表領域に作成されます。
索引再作成に伴うソートでは、利用可能なシステム一時表スペースがラウンドロビンで使用されます。
例えば索引オブジェクトに 3 つの索引が含まれており、利用可能なシステム一時表スペースとして TEMP1、TEMP2 の 2 つが存在する場合、TEMP1 -> TEMP2 -> TEMP1 の順に使用されます。
(オフライン再編成の USE で指定したシステム一時表スペース以外のシステム一時表スペースが使用される可能性がある点に注意してください。)
作成される索引オブジェクトのサイズ、および索引作成に必要な一時スペースのサイズは、以下のページを参照してください。
索引のスペース所要量
- オンライン表再編成では、表再編成のタイミングで索引の再編成が行われないため、表の再編成後 REORG INDEX コマンドの実行を検討してください。
- オフライン表再編成では、表再編成と索引再作成が行われます。表の再編成が完了してから索引が再作成されるため、a と c の所要量を合算する必要はありません。
- データベースに含まれる表データのサイズは、以下の SQL で一覧できます。
db2 "select d.TABNAME,d.TABSCHEMA,d.DATAPARTITIONID,d.TBSPACEID,DATA_OBJECT_P_SIZE from SYSCAT.DATAPARTITIONS d join SYSIBMADM.ADMINTABINFO t on d.TABNAME=t.TABNAME and d.TABSCHEMA=t.TABSCHEMA and d.DATAPARTITIONID=t.DATA_PARTITION_ID"
例:以下の例では表 T1 は 3 つのパーティションをもつパーティション表であり、各パーティションのサイズが KB 単位で表示されます。再編成はパーティションごとに順次実行されます。TABNAME TABSCHEMA DATAPARTITIONID TBSPACEID DATA_OBJECT_P_SIZE (KB) --------- ---------- --------------- ----------- -------------------- T1 DB2INST1 0 3 504832 T1 DB2INST1 1 3 44536320 T1 DB2INST1 2 3 45924352
REORG TABLE コマンド
REORG INDEX/INDEXES コマンド
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlMAAU","label":"Data Movement-\u003EReorg"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
30 August 2023
UID
swg21972905