ヘッダーをスキップ

Oracle Database 概要
11gリリース1(11.1)

E05765-03
目次
目次
索引
索引

戻る 次へ

18 大規模データベース(VLDB)

この章では、VLDB戦略の重要な要素としてパーティション化に重点を置きながら、VLDBの概要を示します。この章の内容は、次のとおりです。

パーティション化の基礎知識

パーティション化とは、大規模な表や索引を、パーティションというより小さくて管理しやすい部分に分割して、この種の表や索引をサポートするときの主な問題に対処します。パーティション表にアクセスする際、SQL問合せとDML文を変更する必要はありません。ただしパーティションを定義すると、DDL文は表や索引全体ではなく、個々のパーティションへのアクセスやその操作ができるようになります。パーティション化を行うと、このようにしてラージ・データベース・オブジェクトの管理を簡素化できます。また、パーティション化は、アプリケーションに対して完全に透過的です。

表や索引の各パーティションは、列名、データ型、制約といった論理属性は同じものを持つ必要がありますが、PCTFREE、PCTUSEDおよび表領域といった物理属性は別のものを持つことができます。

パーティション化は様々なタイプのアプリケーションで有効ですが、特に大量のデータを管理するアプリケーションで便利です。多くの場合、OLTPシステムでは管理性と可用性が改善され、データ・ウェアハウス・システムではパフォーマンスと管理性が向上します。

パーティション化には次のような利点があります。

この項の内容は、次のとおりです。

パーティション・キー

パーティション表の各行は、単一パーティションに明示的に割り当てられます。パーティション・キーは、各行のパーティションを決定する1つ以上の列のセットです。Oracle Databaseでは、パーティション・キーの使用により、挿入、更新および削除操作が適切なパーティションに自動的に送られます。パーティション・キーには次のような特長があります。

パーティション表

表は最大1024K-1のパーティションに分割できます。どの表もパーティション化できますが、LONGデータ型またはLONG RAWデータ型の列を含む表は例外です。ただし、CLOBまたはBLOBの各データ型の列を含む表は使用できます。


注意

ディスク使用量とメモリー使用量(特にバッファ・キャッシュ)を減少させるために、表とパーティション表をデータベースに圧縮形式で格納できます。通常は、これにより読取り専用操作のパフォーマンスが向上します。また、問合せの実行も高速化されます。ただし、CPUオーバーヘッドの面で少しコストがかかります。 


関連項目

「表の圧縮」 

パーティション索引構成表

索引構成表に対してレンジ・パーティション化、リスト・パーティション化またはハッシュ・パーティション化を実行できます。パーティション索引構成表は、索引構成表の管理性、可用性およびパフォーマンスの改善に非常に役立ちます。さらに、索引構成表を使用するデータ・カートリッジも、格納したデータをパーティション化する機能を活用できます。

索引構成表のパーティション化には、次の規定があります。

パーティション化方法

用意されているパーティション化方法は次のとおりです。

パーティション索引の概要

パーティション表と同様、パーティション索引も管理性、可用性、パフォーマンスおよびスケーラビリティを改善します。パーティション索引は独立的にパーティション化する(グローバル索引)ことも、表のパーティション化方法に自動でリンクする(ローカル索引)こともできます。一般に、OLTPアプリケーションにはグローバル索引、データ・ウェアハウス・アプリケーションやDSSアプリケーションにはローカル索引を使用する必要があります。また、管理が容易であるため、できるだけローカル索引を使用するようにしてください。使用するパーティション索引の種類を決定する際には、次のガイドラインを順番に考慮する必要があります。

  1. 表のパーティション化列が索引キーのサブセットの場合は、ローカル索引を使用します。この場合、他のガイドラインを考慮する必要はありません。それ以外の場合は、ガイドライン2に進みます。

  2. 索引が一意索引の場合は、グローバル索引を使用します。この場合、他のガイドラインを考慮する必要はありません。それ以外の場合は、ガイドライン3に進みます。

  3. 管理性を優先する場合は、ローカル索引を使用します。この場合、他のガイドラインを考慮する必要はありません。それ以外の場合は、ガイドライン4に進みます。

  4. アプリケーションがOLTPで、ユーザーがすばやい応答時間を必要とする場合は、グローバル索引を使用します。アプリケーションがDSSで、ユーザーがスループットを重視している場合は、ローカル索引を使用します。

    関連項目

    パーティション索引および使用するタイプを決定する方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』および『Oracle Database管理者ガイド』を参照してください。 

この項の内容は、次のとおりです。

ローカル・パーティション索引

ローカル・パーティション索引は、他のタイプのパーティション索引よりも管理が容易です。ローカル・パーティション索引でも可用性が拡張されており、DSS環境では一般的となっています。その理由は、ローカル索引の各パーティションが必ず表の1つのパーティションに対応付けられている、同一レベル・パーティション化にあります。これにより、Oracle Databaseでは、索引パーティションと表パーティションの同期を自動的に維持することが可能になり、表と索引の各ペアをそれぞれ独立させることができます。1つのパーティションのデータを無効または使用不可能にする処理は、単一パーティションのみに影響します。

ローカル・パーティション索引は、表に対してパーティションまたはサブパーティションのメンテナンス操作を実行するときに、より高い可用性を提供します。ローカルの非同一キー索引と呼ばれる索引タイプは、履歴データベースにきわめて有効です。このタイプの索引では、索引列の左接頭辞に対してパーティション化が存在しません。

関連項目

同一キー索引の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。 

パーティションは、明示的にローカル索引に追加することはできません。基礎となる表にパーティションを追加した場合のみ、新しいパーティションがローカル索引に追加されます。同様に、パーティションを明示的にローカル索引から削除することもできません。基礎となる表からパーティションを削除した場合のみ、ローカル索引のパーティションが削除されます。

ローカル索引は一意索引にできます。ただしローカル索引を一意索引にするには、表のパーティション化キーが索引のキー列の一部である必要があります。一意のローカル索引は、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;


注意

この機能はヒープ構成表のみにサポートされています。 


関連項目

UPDATE INDEXES句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 

グローバル非パーティション索引

グローバル非パーティション索引は、非パーティション索引と同様に動作します。この索引は通常はOLTP環境で使用され、あらゆる個別レコードへの効率的なアクセスを提供します。

パーティション表に索引を作成する場合のその他の情報

パーティション表に対してビットマップ索引を作成できますが、ビットマップ索引はパーティション表に対して必ずローカルであるという制限があります。グローバル索引にすることはできません。

グローバル索引は一意索引にできます。ローカル索引は、パーティション化キーが索引キーの一部である場合、一意索引にしかできません。

OLTPアプリケーションでのパーティション索引の使用

ここではOLTPアプリケーションにいくつかのガイドラインを示します。

データ・ウェアハウス・アプリケーションとDSSアプリケーションでのパーティション索引の使用

ここではデータ・ウェアハウス・アプリケーションとDSSアプリケーションにいくつかのガイドラインを示します。

コンポジット・パーティションでのパーティション索引

ここではコンポジット・パーティションでパーティション索引を使用する際の考慮事項をあげます。

パフォーマンスの改善のためのパーティション化

パーティション化を行うと、パフォーマンスや管理性を改善できます。その理由でパーティション化を使用する際の考慮事項を次に示します。

パーティション・プルーニング

Oracle Databaseは、パーティションとサブパーティションを明確に認識します。次に、アクセスを必要とするパーティションまたはサブパーティションをマークし、不要なパーティションやサブパーティションがこれらのSQL文によるアクセスから除外(プルーニング)されるようにするために、SQL文を最適化します。言い換えると、パーティション・プルーニングとは、問合せの際に不要な索引およびデータのパーティションやサブパーティションをスキップすることです。

SQL文ごとに、指定された選択基準に応じて不必要なパーティションやサブパーティションが除外されます。たとえば、3月の売上データのみに関する問合せであれば、残りの11か月に関するデータを取り出す必要はありません。このようなインテリジェント・プルーニング機能によって、データの量を大幅に低減できるため、問合せのパフォーマンスが実質的に向上します。

SQLアクセス・アドバイザは、指定されたワークロードのスキーマ設計を自動的に分析し、ワークロードに応じた索引、ファンクション索引、パーティションおよびマテリアライズド・ビューの作成、保持または削除を提案できます。

関連項目

SQLアクセス・アドバイザの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 

オプティマイザは、アクセスされるパーティションまたはサブパーティションのすべての行がプルーニングによって使用される選択基準を満たすかどうかを判断する場合に、パフォーマンスを向上させるために、評価のときにそれらの基準を述語リスト(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つの表を結合するための最適化のことです。パーティション・ワイズ結合では、結合の操作が小さな単位に分割され、それぞれが順番にまたはパラレルで実行されます。別の見方をすれば、パーティション・ワイズ結合は、パラレル結合の実行時にデータ配分を考慮することでパラレルのスレーブ間で交換されるデータの量を最小化するものです。

関連項目

パーティション化方法およびパーティション・ワイズ結合の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。 


戻る 次へ
Oracle
Copyright © 1993, 2008 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引