日本語PDF

8.3 インメモリー・パラレル実行

インメモリー機能には、パラレル実行のための技法が用意されています。

この項では、インメモリー・パラレル実行について説明します。

8.3.1 パラレル実行でのバッファ・キャッシュの使用

デフォルトでは、オブジェクトが非常に小さいかCACHEとして宣言されている場合を除き、パラレル実行ではスキャン済ブロックをキャッシュするためにSGA (バッファ・キャッシュ)は使用されません。

インメモリー・パラレル実行では、パラメータPARALLEL_DEGREE_POLICYAUTOに設定することで有効になっている場合、パラレル文でSGAを使用してオブジェクト・ブロックをキャッシュできます。Oracle Databaseでは、パラレル実行を使用してアクセスされるオブジェクトにとって、SGAにキャッシュされることが有益かどうかが判断されます。オブジェクトをキャッシュするかどうかの決定は、サイズやアクセス頻度などの明確な経験則に基づいて行われます。Oracle Real Applications Cluster (Oracle RAC)環境では、Oracle Databaseにより、オブジェクトのピースがアクティブ・インスタンスの各バッファ・キャッシュにマップされます。このマッピングを作成することで、オブジェクトの様々な部分もしくはピースを見つけるためにアクセスするバッファ・キャッシュが自動的にわかります。この情報を使用すると、複数のインスタンスが、ディスクから同じ情報を何度も繰り返して読み取ることがなくなり、オブジェクトをキャッシュできるメモリー容量を最大化することができます。これは、ブロックがキャッシュされるインスタンス上でPXサーバーを使用することで実行されます。

オブジェクトのサイズが、バッファ・キャッシュ(単一インスタンス)の合計サイズに基づくか、バッファ・キャッシュのサイズにOracle RACクラスタ内のアクティブ・インスタンスの数を乗算した値に基づく、特定のしきい値より大きい場合、オブジェクトはダイレクト・パス読取りを使用して読み取られ、SGAにキャッシュされません。

8.3.2 自動ビッグ・テーブル・キャッシング

自動ビッグ・テーブル・キャッシングでは、問合せをバッファ・キャッシュと統合して、単一インスタンス環境とOracle RAC環境の両方で、Oracle Databaseのインメモリー問合せ機能を拡張します。

Oracle Real Application Clusters (Oracle RAC)環境では、この機能はパラレル問合せでのみサポートされます。単一インスタンス環境では、この機能はパラレル問合せとシリアル問合せの両方でサポートされます。

大きな表のキャッシュに予約されているキャッシュ・セクションが、表スキャンのためのデータのキャッシュに使用されます。大きな表のキャッシュは主としてデータ・ウェアハウスのワークロードのパフォーマンスを高めるために設計されていますが、混在するワークロードを実行するOracle Databaseのパフォーマンスも向上します。

自動ビッグ表キャッシュでは、温度およびオブジェクト・ベースのアルゴリズムを使用して中間表およびビッグ表を追跡します。Oracleではかなり小規模の表をキャッシュしますが、自動ビッグ表キャッシュではこれらの表は追跡されません。

シリアル問合せで自動ビッグ・テーブル・キャッシングを有効化するには、DB_BIG_TABLE_CACHE_PERCENT_TARGET初期化パラメータの値(パーセント)を設定する必要があります。さらに、パラレル問合せで自動ビッグ・テーブル・キャッシングの使用を有効化するには、PARALLEL_DEGREE_POLICY初期化パラメータをAUTOまたはADAPTIVEに設定する必要があります。Oracle RAC環境では、自動ビッグ・テーブル・キャッシングはパラレル問合せでのみサポートされるため、両方の設定が必要です。

大きい表のサイズがほぼ、すべてのインスタンスの大きい表のキャッシュを合計したサイズである場合、すべてのインスタンスで、表はパーティション化されてキャッシュされます(または大部分がキャッシュされます)。インメモリー問合せで表の問合せのほとんどのディスク読取りが排除されるか、データベースで大きい表のキャッシュに入らない表の部分についてのみディスク読取りが行われます。大きい表のキャッシュでスキャン対象のすべての表をキャッシュできない場合、最も頻繁にアクセスされる表のみがキャッシュされ、残りは直接読取りで自動的に読み取られます。

DB_BIG_TABLE_CACHE_PERCENT_TARGETパラメータは、スキャンに使用するバッファ・キャッシュ・サイズのパーセントを決定します。DB_BIG_TABLE_CACHE_PERCENT_TARGET80 (%)に設定した場合、バッファ・キャッシュの80 (%)がスキャンに使用され、残りの20 (%)がOLTPワークロードに使用されます。

PARALLEL_DEGREE_POLICYAUTOまたはADAPTIVEに設定されている場合、DB_BIG_TABLE_CACHE_PERCENT_TARGETパラメータはOracle RAC環境でのみ有効化されます。DB_BIG_TABLE_CACHE_PERCENT_TARGETのデフォルトは0 (無効)で、上限は90 (%)で、少なくとも10%のバッファ・キャッシュを表スキャン以外の使用のために予約しています。値が0の場合、インメモリー問合せは既存のLeast Recently Used (LRU)メカニズムで実行されます。DB_BIG_TABLE_CACHE_PERCENT_TARGETパラメータは動的に調整できます。

DB_BIG_TABLE_CACHE_PERCENT_TARGETパラメータの設定時には、次のガイドラインを使用してください。

  • Oracle RAC環境で自動並列度(DOP)を有効にしない場合は、このパラメータを設定しないでください。このような場合、大きい表のキャッシュ・セクションは使用されないためです。

  • このパラメータを設定する際は、ワークロードの混在を検討する必要があります(OLTPにどれだけのワークロードを要するか; 挿入、更新、ランダム・アクセス; 表スキャンにどれだけのワークロードを要するか)。データ・ウェアハウスのワークロードではしばしば、大きい表のスキャンが実行されるため、大きい表のキャッシュ・セクションに、データ・ウェアハウス用に大きい割合のバッファ・キャッシュ領域を付与することを検討できます。

  • このパラメータは、ワークロードが変わると、動的に変わる可能性があります。その時にバッファ・キャッシュ・メモリーがアクティブに使用されている可能性があるため、目標を達成する現在のワークロードによっては、変更に多少時間がかかることがあります。

PARALLEL_DEGREE_POLICYAUTOまたはADAPTIVEに設定されている場合、データ・ウェアハウスのロードおよびスキャン・バッファのオブジェクトレベルの統計が追加され、特定(ヘルパー)インスタンスのオブジェクトのパラレル(PQ)スキャン数が示されます。

V$BT_SCAN_CACHEおよびV$BT_SCAN_OBJ_TEMPSビューには、大きい表のキャッシュに関する情報が表示されます。

関連項目: