テーブルのパーティション化
物理モデルの作成 への移動
目次
- 1 Sybase のテーブル パーティション オプション
- 2 Oracle 8.x、9i、10g、11g、および 12c のテーブル パーティション オプション
- 3 Oracle 8.x、9i、10g、11g、および 12c の[テーブル パーティション エディタ]
- 4 IBM DB2 for OS/390 8.x、9.x、および 10.x のテーブル パーティション オプション
- 5 IBM DB2 for OS/390 8.x、9.x、および 10.x の[テーブル パーティション エディタ]
- 6 IBM DB2 for LUW 9.x および 10.x のテーブル パーティション オプション
- 7 IBM DB2 for LUW 9.x(およびそれ以降のバージョン)の[テーブル パーティション エディタ]
- 8 IBM DB2 for LUW 5.x、6.x、7.x、8.x のテーブル パーティション カラム
- 9 関連項目
ほとんどのデータベース アプリケーションは、I/O の速度によってパフォーマンスが決まります。I/O のスループットを向上させるには、頻繁に結合されるテーブルを物理的に分離する必要があります。また、テーブルとインデックスも分離する必要があります。この目的は、データベース上でのデータの読み取りや書き込み処理をできるだけ並列して実行できるようにするためです。
- モデル ウィンドウで、パーティション化するテーブルをダブルクリックします。
- [テーブル エディタ]の[パーティション]タブをクリックし、パーティション オプションを指定するカラムを選択します。
- パーティション オプションの設定が完了したら、[追加]をクリックして、[テーブル パーティション エディタ]を開きます。
- [テーブル パーティション エディタ]のオプションの設定を完了したら、[閉じる]をクリックしてエディタを閉じてから、再度[OK]をクリックし、[テーブル エディタ]を閉じます。
- [パーティション]タブと[テーブル パーティション エディタ]で使用できるパーティション オプションは、データベース プラットフォームの種類とバージョンによって異なります。
次に、一部のオプションについて補足説明します。データベース プラットフォーム別のストレージ オプションの詳細については、次のリンクを参照してください。
Sybase のテーブル パーティション オプション
- [パーティション テーブル](PARTITION 数): テーブルをパーティション化する場合にオンにして、必要なパーティション数を入力します。
Oracle 8.x、9i、10g、11g、および 12c のテーブル パーティション オプション
- [エクスポート先]: パーティション タイプを選択します。
- [COMPOSITE]: 異なるキー上のレンジ パーティションをハッシュ パーティション化します。このタイプを選択したら、[サブパーティション タイプ]をクリックして、サブパーティションを指定します。パーティション化をすすめると並列処理を実行しやすくなるため、競合が軽減されます。次の例では、invoiceDate でテーブルをレンジ パーティション化し、それらのパーティションを invoiceNo でサブパーティション化します。結果として 16 個のサブパーティションが作成されます。
CREATE TABLE invoices
(invoice_no NUMBER NOT NULL,
invoice_date DATE NOT NULL)
PARTITION BY RANGE (invoiceDate)
SUBPARTITION BY HASH (invoiceNo)
SUBPARTITIONS 4
(PARTITION invoices_Q1 VALUES LESS THAN (TO_DATE('01/04/2007', 'DD/MM/YYYY')),
PARTITION invoices_Q2 VALUES LESS THAN (TO_DATE('01/07/2007', 'DD/MM/YYYY')),
PARTITION invoices_Q3 VALUES LESS THAN (TO_DATE('01/09/2007', 'DD/MM/YYYY')),
PARTITION invoices_Q4 VALUES LESS THAN (TO_DATE('01/01/2008', 'DD/MM/YYYY'));
-
- [RANGE](PARTITION BY RANGE (カラム名)): 日付のような異なるデータ範囲をまとめて保存します。検索は、正しい期間のデータを含むパーティションに制限されます。履歴データが無効になると、パーティション全体が削除されます。
- [HASH](PARTITION BY HASH (カラム名) PARTITIONS <パーティション数> STORE IN <テーブルスペース>): 明白なレンジ キーが存在しないか、またはレンジ パーティション化によりデータ配分が不均一になる場合に選択します。
- [LIST](PARTITION BY LIST): 行をパーティションへマッピングする方法を制御します。各パーティションに記述されたパーティション キーに対し、個別の値を持つリストを指定します。
- [サブパーティション タイプ]ボタン: [サブパーティション エディタ]を開き、サブパーティションで使用するカラムを指定できます。HASH サブパーティションでは、サブパーティションの数とその保存場所を指定できます。LIST サブパーティションでは、含めるサブパーティションを指定できます。
- [利用可能なカラム]: パーティションに追加できるカラムが表示されます。
- [選択したカラム]: パーティション キーを構成するカラムが表示されます。データがパーティション境界でどのように分割されるかを設定します。通常、パーティション キーは日付を基準とするか、または数値で順序付けられたデータ グループに基づきます。左矢印と右矢印をクリックして、カラムをこのグリッドへ追加したり、このグリッドから除去します。パーティションは、このグリッド内のカラムによって構成されます。
- [上へ]/[下へ]ボタン: パーティション内のカラムを並べ替えます。パーティションの順序はアクセス速度に影響します。最も頻繁にアクセスされるカラムは、パーティション リストの一番上に配置する必要があります。
- [追加]: テーブル パーティションを追加します。クリックすると、Oracle 8.x、9i、10g、11g、および 12c の[テーブル パーティション エディタ]が開きます。
- [編集]: 選択したパーティションを編集します。クリックすると、Oracle 8.x、9i、10g、11g、および 12c の[テーブル パーティション エディタ]が開きます。
Oracle 8.x、9i、10g、11g、および 12c の[テーブル パーティション エディタ]
- [最大値](VALUES LESS THAN (MAXVALUE)): 指定したすべての範囲を超える値に対して、キャッチオール パーティションを作成します。そうでない場合、パーティション範囲の上限を指定します。
- [上限](VALUES LESS THAN (上限値)): パーティション範囲の終了値を指定します。
- [テーブルスペース]: テーブルが格納されるテーブルスペースの名前を指定します。
- [No Logging]: オンにすると、DDL 操作が REDO ファイルに記録されません。これにより、インデックスの作成や更新に要する時間を最大 30% 削減できます。
- [Pct Free](PCTFREE): 将来の更新のために各データ ブロックに確保する領域の割合の最大値を指定します。この予約領域により、更新処理でデータ行の長さが拡張されることで生じる、行の移行や連鎖を回避できます。更新されないテーブルでは、この値を 0 に設定してください。
- [Pct Used](PCTUSED): 利用可能なブロック一覧に再追加する前に各データ ブロックで使用できる領域の割合の最大値を指定します。削除操作が発生し、ブロック内の空き領域がこの値を下回ると、そのブロックは新しい挿入操作に利用できるようになります。更新されないテーブルでは、この値を 99 に設定してください。デフォルト値である 40% は、ブロックの使用率が 40% を下回った場合に、そのブロックが挿入操作に利用できることを示します。
- [Initial Trans](INITTRANS): データ ブロックのヘッダに領域があらかじめ確保される DML トランザクションの数を指定します。Oracle では、ブロック内のどの行がコミット済みおよびコミット前の変更点を含んでいるかを示す制御情報をデータ ブロックに格納します。保持される履歴の量は、このパラメータによって制御されます。非常に短い期間に、多数のトランザクションが同時に同じデータ ブロックを変更する場合、Oracle では、ある行が最新のトランザクションで更新されたかどうかを決定するための履歴情報を確保できないことがあります。インデックスに大きな値を指定すると、多数のトランザクションが同じブロックを更新する可能性があります。
- [Max Trans](MAXTRANS): INITRANS によって確保された領域が使い切られると、利用可能な空き領域から追加のトランザクション エントリ用の領域が割り当てられます。この領域は一度割り当てられると、事実上、ブロック ヘッダの永続的なパートになります。このパラメータは、データ ブロック内のデータを同時に使用できるトランザクション エントリの数を制限します。したがって、データ ブロック内のトランザクション エントリに割り当て可能な空き領域も制限することになります。
- [サブパーティションの編集]ボタン: [サブパーティション エディタ]を開き、パーティションをサブパーティション化する方法と、サブパーティションの保存場所を指定できます。
- [Initial Extent](INITEXTENT): Oracle が確保するデータ ブロックの初期数を指定します。Oracle が確保するデータ ブロックの数は、そのテーブル行の Initial Extent に対応します。
- [Next Extent](NEXT): 次のエクステントのサイズをキロバイト(KB)単位で指定します。この数値は、テーブルスペースの空き領域内の利用可能な最大チャンクと比較して検討する必要があります。テーブルが次のエクステントを割り当てられない場合は、エクステントを拡張できず、データを追加できません。
- [Pct Increase](PCTINCREASE): 前のエクステントのサイズを基準にして、次のエクステントを拡張する割合を指定します。Percent Increase の設定には注意が必要です。オブジェクトの増加する割合を大きく指定すると、テーブルスペース内の利用可能な空き領域に大きく影響する場合があるためです。
- [Min Extents](MINEXTENTS): セグメントの作成時に割り当てるエクステントの数を指定します。すべての使用済みエクステントまたは空きエクステントが指定値以上であることを保証して、空き領域の断片化を制御します。
- [Max Extents](MAXEXTENTS): Oracle がインデックスに割り当て可能なエクステントの最大数を指定します。この制限に達すると、Oracle でそれ以上クラスタは拡張されず、データを追加できません。インデックスに割り当て済みのエクステント数がこの制限に達していないか、注意深く監視してください。
- [Free Lists](FREELISTS): インデックスに適用する空きリストの数を指定します。デフォルトは 1 で、これが最小値です。空きリストは、インデックスに対して複数のプロセスが同時に発行された際のデータ ブロックの割り当て管理に役立ちます。Oracle では、INSERT 操作が発生したときに使用するデータ ブロックを空きリストによって決定します。Oracle では、複数の空きリストを持つテーブルおよびインデックスを定義できます。すべてのテーブルおよびインデックスの空きリストは、同時に発生する可能性のある INSERT や UPDATE アクティビティの最大数に設定すべきです。たとえば、インデックスで最大 20 人のエンド ユーザーが INSERT 操作を実行する可能性がある場合、そのインデックスには FREELISTS=20 を設定する必要があります。空きリストの値が低すぎると、Oracle のパフォーマンスが低下する原因となります。FREELISTS または FREELIST_GROUPS を増加させると、セグメント ヘッダの競合を軽減できます。
- [Free List Groups]( FREELIST GROUPS): Parallel Server オプション付きの Oracle をパラレル モードで使用する場合にのみ有効です。インデックスに複数のセグメント ヘッダを許可する空きリスト グループの数を指定します。これによって、複数のタスクがインデックスへの挿入操作を実行できます。その結果、セグメント ヘッダの競合を軽減できます。空きリスト グループは、インデックスにアクセスする Oracle Parallel Server インスタンスの数に設定する必要があります。オブジェクトがパーティション分割されていたり、セグメント ヘッダが競合する場合、freelist_groups を非 RAC システムに対して設定できます。
- [Buffer Pool](BUFFER_POOL): メモリ内データ ブロックのキャッシュに使用されるメモリ構造を指定します。これによりデータ アクセスの速度が向上します。
[DEFAULT]: データ ブロックをデフォルトのバッファ プールにキャッシュします。
[KEEP]: オブジェクトをメモリ内に保持して I/O 競合を回避します。
[RECYCLE]: 使用していないデータ ブロックを直ちにメモリから除去し、キャッシュ スペースを節約します。
IBM DB2 for OS/390 8.x、9.x、および 10.x のテーブル パーティション オプション
- [利用可能なカラム]: パーティションに追加できるカラムが表示されます。
- [選択したカラム]: パーティション キーを構成するカラムが表示されます。データがパーティション境界でどのように分割されるかを設定します。通常、パーティション キーは日付を基準とするか、または数値で順序付けられたデータ グループに基づきます。左矢印と右矢印をクリックして、カラムをこのグリッドへ追加したり、このグリッドから除去します。パーティションは、このグリッド内のカラムによって構成されます。
- [上へ]/[下へ]ボタン: パーティション内のカラムを並べ替えます。パーティションの順序はアクセス速度に影響します。最も頻繁にアクセスされるカラムは、パーティション リストの一番上に配置する必要があります。
- [追加]: テーブル パーティションを追加します。クリックすると、IBM DB2 for OS/390 8.x、9.x、および 10.x の[テーブル パーティション エディタ]が開きます。
- [編集]: 選択したパーティションを編集します。クリックすると、IBM DB2 for OS/390 8.x、9.x、および 10.x の[テーブル パーティション エディタ]が開きます。
IBM DB2 for OS/390 8.x、9.x、および 10.x の[テーブル パーティション エディタ]
- [パーティション]: 既存のパーティションが表示されます。複数のカラムを使用してパーティションを作成する場合、パーティション キー(カラム)の終了値が[終了:]カラムに一覧表示されます。表示順序は、パーティション定義内のカラムと同じです。パーティション定義を変更するには、パーティションを選択し、[パーティション定義]領域の[上限]の値を変更します。
- [パーティション定義]: 各パーティション キーの上限を定義します。一覧表示された各パーティション キーに上限の値を入力してください。
- [包める]: オンにすると上限値がパーティションに含まれます。オフにすると上限値の直前の値がパーティションの終端になります。
IBM DB2 for LUW 9.x および 10.x のテーブル パーティション オプション
- [利用可能なカラム]: パーティションに追加できるカラムが表示されます。
- [選択したカラム]: パーティション キーを構成するカラムが表示されます。データがパーティション境界でどのように分割されるかを設定します。通常、パーティション キーは日付を基準とするか、または数値で順序付けられたデータ グループに基づきます。左矢印と右矢印をクリックして、カラムをこのグリッドへ追加したり、このグリッドから除去します。パーティションは、このグリッド内のカラムによって構成されます。
- [上へ]/[下へ]ボタン: パーティション内のカラムを並べ替えます。パーティションの順序はアクセス速度に影響します。最も頻繁にアクセスされるカラムは、パーティション リストの一番上に配置する必要があります。
- [追加]: テーブル パーティションを追加します。クリックすると、IBM DB2 for LUW 9.x(およびそれ以降のバージョン)の[テーブル パーティション エディタ]が開きます。
- [編集]: 選択したパーティションを編集します。クリックすると、IBM DB2 for LUW 9.x(およびそれ以降のバージョン)の[テーブル パーティション エディタ]が開きます。
IBM DB2 for LUW 9.x(およびそれ以降のバージョン)の[テーブル パーティション エディタ]
次のような PARTITION BY RANGE 文を作成できます。
CREATE TABLE orders (id INT, shipdate DATE, ...)
PARTITION BY RANGE(shipdate)
(
STARTING '1/1/2006' ENDING '12/31/2006'
EVERY 3 MONTHS
)
- [パーティション]: 既存のパーティションが表示されます。複数のカラムを使用してパーティションを作成する場合、パーティション キー(カラム)の終了値が[終了値]カラムに一覧表示されます。表示順序は、パーティション定義内のカラムと同じです。パーティション定義を変更するには、パーティションを選択し、[パーティション定義]領域の[開始値]の値を変更します。
- [名前]: パーティションの名前を定義します。このフィールドは、複数のパーティションを自動的に作成する際には使用されません。[範囲値]および[期間ラベル]フィールドを使用して、EVERY 3 MONTHS など、範囲パーティションの生成文を作成します。
- [カラム名]: [パーティション]タブでパーティションの一部として選択されたカラム名が表示されます。
- [開始値]: パーティションに含める、もっとも早い日付や時間、または最小の整数値を指定します。パーティション生成文では、開始値は STARTING FROM の値になります。
日付の文字列は、次のいずれかの形式で指定できます。
• yyyy - mm - dd
• mm / dd / yyyy
• dd . mm . yyyy
タイムスタンプの文字列は次の形式で指定できます。
• yyyy - mm - dd hh . mm . ss . nnnnnn
• yyyy - mm - dd - hh . mm . ss . nnnnnn
一覧から MINVALUE または MAXVALUE を選択することもできます。これらの値はデータ型によって異なります。[開始値]を指定したら、次に[終了値]を指定します。 - [開始値を含める]: オンにすると、指定した開始値がパーティションに含まれます。挿入されるキーワードは INCLUSIVE IN です。オフの場合、パーティションは指定した開始値より 1 つ上の値から始まります。挿入されるキーワードは EXCLUSIVE IN です。
- [終了値]: パーティションに含める、もっとも最新の日付/時間、または最大の整数値を指定します。日付によってパーティション化されたテーブルでは、この値は ENDING 値になります。日付およびタイムスタンプの文字列で使用できる形式については、開始値の説明を参照してください。
- [終了値を含める]: オンにすると、指定した終了値がパーティションに含まれます。挿入されるキーワードは INCLUSIVE IN です。オフの場合、パーティションは指定した終了値より 1 つ上の日付/時間または整数値で終了します。挿入されるキーワードは EXCLUSIVE IN です。
- [範囲値]: [範囲値]および[期間ラベル]を使用して、複数のパーティションを自動的に作成します。[範囲値]には、テーブルのパーティション化に使用する日付、時間、または整数の間隔を指定します。たとえば、EVERY 3 MONTHS という句の場合、[範囲値]は 3 になります。
- [期間ラベル]: 一覧から、テーブルのパーティション化に使用する期間の単位を選択します。EVERY 3 MONTHS という句の場合、[期間ラベル]は MONTHS になります。整数でパーティション化するテーブルでは、[期間ラベル]に[(none)]を選択します。
- [テーブルスペース]: パーティションが保存されるテーブルスペースを指定します。
- [LONG IN]: LONG データが保存される大容量テーブルスペースを指定します。ラージ オブジェクトはデフォルトで、対応するデータ オブジェクトと同じテーブルスペースに保存されます。パーティション化されたテーブルで、1 つのテーブルスペースまたは複数のテーブルスペースのどちらが使用されていても同様です。LONG IN 句は、このデフォルトの動作を上書きします。その結果、LONG データは指定したテーブルスペースに保存され、データベースのパフォーマンスを向上させることができます。
IBM DB2 for LUW 5.x、6.x、7.x、8.x のテーブル パーティション カラム
- [利用可能なカラム]: パーティションに追加できるすべてのカラムが表示されます。パーティションに追加するカラムを選択して、[選択したカラム]ボックスに移動します。
- [選択したカラム]: パーティション キーを構成するカラムが表示されます。データがパーティション境界でどのように分割されるかを設定します。通常、パーティション キーは日付を基準とするか、または数値で順序付けられたデータ グループに基づきます。左矢印と右矢印をクリックして、カラムをこのグリッドへ追加したり、このグリッドから除去します。パーティションは、このグリッド内のカラムによって構成されます。
- [上へ]/[下へ]ボタン: パーティション内のカラムを並べ替えます。パーティションの順序はアクセス速度に影響します。最も頻繁にアクセスされるカラムは、パーティション リストの一番上に配置する必要があります。
- [ハッシュを使用]: オンにすると、ハッシュ関数に基づいてテーブルがパーティション化されます。これによってテーブルのルックアップやデータ比較の作業を高速化することができます。