Oracle Database 概要 11gリリース1(11.1) E05765-03 |
|
この章では、VLDB戦略の重要な要素としてパーティション化に重点を置きながら、VLDBの概要を示します。この章の内容は、次のとおりです。
パーティション化とは、大規模な表や索引を、パーティションというより小さくて管理しやすい部分に分割して、この種の表や索引をサポートするときの主な問題に対処します。パーティション表にアクセスする際、SQL問合せとDML文を変更する必要はありません。ただしパーティションを定義すると、DDL文は表や索引全体ではなく、個々のパーティションへのアクセスやその操作ができるようになります。パーティション化を行うと、このようにしてラージ・データベース・オブジェクトの管理を簡素化できます。また、パーティション化は、アプリケーションに対して完全に透過的です。
表や索引の各パーティションは、列名、データ型、制約といった論理属性は同じものを持つ必要がありますが、PCTFREE、PCTUSEDおよび表領域といった物理属性は別のものを持つことができます。
パーティション化は様々なタイプのアプリケーションで有効ですが、特に大量のデータを管理するアプリケーションで便利です。多くの場合、OLTPシステムでは管理性と可用性が改善され、データ・ウェアハウス・システムではパフォーマンスと管理性が向上します。
パーティション化には次のような利点があります。
パーティションのメンテナンス操作におけるパーティションの独立性により、同じ表や索引にある異なるパーティションのメンテナンス操作を同時に行うことができます。また、メンテナンス操作の影響を受けないパーティションに対して、SELECT
操作とDML操作を同時に実行できます。
SELECT
文やDML文を一切変更せずに、非パーティション表をパーティション表に変換できます。パーティション化を活用するためにアプリケーションのコードを書き換える必要はありません。
この項の内容は、次のとおりです。
パーティション表の各行は、単一パーティションに明示的に割り当てられます。パーティション・キーは、各行のパーティションを決定する1つ以上の列のセットです。Oracle Databaseでは、パーティション・キーの使用により、挿入、更新および削除操作が適切なパーティションに自動的に送られます。パーティション・キーには次のような特長があります。
表は最大1024K-1のパーティションに分割できます。どの表もパーティション化できますが、LONG
データ型またはLONG RAW
データ型の列を含む表は例外です。ただし、CLOB
またはBLOB
の各データ型の列を含む表は使用できます。
索引構成表に対してレンジ・パーティション化、リスト・パーティション化またはハッシュ・パーティション化を実行できます。パーティション索引構成表は、索引構成表の管理性、可用性およびパフォーマンスの改善に非常に役立ちます。さらに、索引構成表を使用するデータ・カートリッジも、格納したデータをパーティション化する機能を活用できます。
索引構成表のパーティション化には、次の規定があります。
OVERFLOW
データ・セグメントは、常に表パーティションと同一レベルでパーティション化されます。
用意されているパーティション化方法は次のとおりです。
パーティション表と同様、パーティション索引も管理性、可用性、パフォーマンスおよびスケーラビリティを改善します。パーティション索引は独立的にパーティション化する(グローバル索引)ことも、表のパーティション化方法に自動でリンクする(ローカル索引)こともできます。一般に、OLTPアプリケーションにはグローバル索引、データ・ウェアハウス・アプリケーションやDSSアプリケーションにはローカル索引を使用する必要があります。また、管理が容易であるため、できるだけローカル索引を使用するようにしてください。使用するパーティション索引の種類を決定する際には、次のガイドラインを順番に考慮する必要があります。
この項の内容は、次のとおりです。
ローカル・パーティション索引は、他のタイプのパーティション索引よりも管理が容易です。ローカル・パーティション索引でも可用性が拡張されており、DSS環境では一般的となっています。その理由は、ローカル索引の各パーティションが必ず表の1つのパーティションに対応付けられている、同一レベル・パーティション化にあります。これにより、Oracle Databaseでは、索引パーティションと表パーティションの同期を自動的に維持することが可能になり、表と索引の各ペアをそれぞれ独立させることができます。1つのパーティションのデータを無効または使用不可能にする処理は、単一パーティションのみに影響します。
ローカル・パーティション索引は、表に対してパーティションまたはサブパーティションのメンテナンス操作を実行するときに、より高い可用性を提供します。ローカルの非同一キー索引と呼ばれる索引タイプは、履歴データベースにきわめて有効です。このタイプの索引では、索引列の左接頭辞に対してパーティション化が存在しません。
パーティションは、明示的にローカル索引に追加することはできません。基礎となる表にパーティションを追加した場合のみ、新しいパーティションがローカル索引に追加されます。同様に、パーティションを明示的にローカル索引から削除することもできません。基礎となる表からパーティションを削除した場合のみ、ローカル索引のパーティションが削除されます。
ローカル索引は一意索引にできます。ただしローカル索引を一意索引にするには、表のパーティション化キーが索引のキー列の一部である必要があります。一意のローカル索引は、OLTP環境では有効です。
Oracle Databaseには、レンジ・パーティションおよびハッシュ・パーティションという2種類のグローバル・パーティション索引があります。
この項の内容は、次のとおりです。
グローバル・レンジ・パーティション索引は、パーティション化の程度とパーティション化キーが表のパーティション化方法から独立しているため、柔軟といえます。この索引は通常はOLTP環境で使用され、あらゆる個別レコードへの効率的なアクセスを提供します。
グローバル索引の最も上位のパーティションのパーティション・バウンドには、すべての値にMAXVALUE
を指定する必要があります。これにより、基礎になる表のすべての行を索引に含めることができます。グローバル同一キー索引は、一意の索引にも、一意でない索引にもできます。
最上位のパーティションには常にMAXVALUE
のパーティション・バウンドがあるため、グローバル索引にはパーティションを追加できません。新規に最上位パーティションを追加する場合は、ALTER INDEX SPLIT PARTITION
文を使用します。グローバル索引のパーティションが空の場合、ALTER INDEX DROP PARTITION
文を発行すると明示的に削除できます。グローバル索引のパーティションにデータが含まれている場合は、パーティションを削除すると、次に上位のパーティションにUNUSABLEマークが設定されます。グローバル索引の最上位パーティションは削除できません。
グローバル・ハッシュ・パーティション索引では、索引が直線的に大きくなっていく場合に競合が分散され、パフォーマンスが改善されます。つまり、索引挿入のほとんどは索引の右端でのみ発生します。
デフォルトでは、ヒープ構成表のパーティションに次の操作を行うと、グローバル索引すべてにUNUSABLEマークが設定されます。
ADD (HASH) COALESCE (HASH) DROP EXCHANGE MERGE MOVE SPLIT TRUNCATE
操作のためのSQL文にUPDATE INDEXES
句を追加すると、これらの索引をメンテナンスできます。グローバル索引をメンテナンスすることには、次の2つの利点があります。
例:
ALTER TABLE DROP PARTITION P1 UPDATE INDEXES;
グローバル非パーティション索引は、非パーティション索引と同様に動作します。この索引は通常はOLTP環境で使用され、あらゆる個別レコードへの効率的なアクセスを提供します。
パーティション表に対してビットマップ索引を作成できますが、ビットマップ索引はパーティション表に対して必ずローカルであるという制限があります。グローバル索引にすることはできません。
グローバル索引は一意索引にできます。ローカル索引は、パーティション化キーが索引キーの一部である場合、一意索引にしかできません。
ここではOLTPアプリケーションにいくつかのガイドラインを示します。
ここではデータ・ウェアハウス・アプリケーションとDSSアプリケーションにいくつかのガイドラインを示します。
ここではコンポジット・パーティションでパーティション索引を使用する際の考慮事項をあげます。
パーティション化を行うと、パフォーマンスや管理性を改善できます。その理由でパーティション化を使用する際の考慮事項を次に示します。
Oracle Databaseは、パーティションとサブパーティションを明確に認識します。次に、アクセスを必要とするパーティションまたはサブパーティションをマークし、不要なパーティションやサブパーティションがこれらのSQL文によるアクセスから除外(プルーニング)されるようにするために、SQL文を最適化します。言い換えると、パーティション・プルーニングとは、問合せの際に不要な索引およびデータのパーティションやサブパーティションをスキップすることです。
SQL文ごとに、指定された選択基準に応じて不必要なパーティションやサブパーティションが除外されます。たとえば、3月の売上データのみに関する問合せであれば、残りの11か月に関するデータを取り出す必要はありません。このようなインテリジェント・プルーニング機能によって、データの量を大幅に低減できるため、問合せのパフォーマンスが実質的に向上します。
SQLアクセス・アドバイザは、指定されたワークロードのスキーマ設計を自動的に分析し、ワークロードに応じた索引、ファンクション索引、パーティションおよびマテリアライズド・ビューの作成、保持または削除を提案できます。
オプティマイザは、アクセスされるパーティションまたはサブパーティションのすべての行がプルーニングによって使用される選択基準を満たすかどうかを判断する場合に、パフォーマンスを向上させるために、評価のときにそれらの基準を述語リスト(WHERE
句)から削除します。ただし、SQL文によってパーティション化される列にTO_DATE
以外の関数が適用されると、オプティマイザはパーティションをプルーニングできません。同様に、ファンクション索引でないかぎり、SQL文によって索引付きの列に関数が適用されると、オプティマイザは索引を使用できません。
基礎となる表のパーティションを排除できない場合にも、パーティションのプルーニングによって索引パーティションを排除できますが、これは索引と表が別々の列にパーティション化されている場合にかぎります。大規模な表に対する操作のパフォーマンスは、SQL文がアクセスまたは変更する必要のあるデータ量を削減するパーティション索引を作成すると改善できます。
等価、レンジ、LIKE
およびIN
-listの述語は、レンジ・パーティション化またはリスト・パーティション化によるパーティション・プルーニングの対象とされ、等価かつIN
-listの述語は、ハッシュ・パーティション化によるパーティション・プルーニングの対象とされます。
cust_orders
と呼ばれるパーティション表があります。cust_orders
のパーティション・キーはorder_date
です。cust_orders
には1月〜6月までの6か月分のデータがあり、各月のデータに対して1つのパーティションが設定されているとします。ここで次のような問合せを実行するとします。
SELECT SUM(value) FROM cust_orders WHERE order_date BETWEEN '28-MAR-98' AND '23-APR-98';
パーティション・プルーニングは次のように行われます。
パーティション・ワイズ結合とは、結合列に沿ってパーティション化された2つの表を結合するための最適化のことです。パーティション・ワイズ結合では、結合の操作が小さな単位に分割され、それぞれが順番にまたはパラレルで実行されます。別の見方をすれば、パーティション・ワイズ結合は、パラレル結合の実行時にデータ配分を考慮することでパラレルのスレーブ間で交換されるデータの量を最小化するものです。
|
![]() Copyright © 1993, 2008 Oracle Corporation. All Rights Reserved. |
|