プライマリ・コンテンツに移動
Oracle® Database管理者ガイド
12cリリース1 (12.1)
B71301-11
目次へ移動
目次
索引へ移動
索引

前
次

6 メモリーの管理

メモリー管理には、データベースの変更に応じたOracle Databaseインスタンス・メモリー構造の最適なサイズのメンテナンスが含まれます。

6.1 メモリー管理について

管理する必要があるメモリー構造は、システム・グローバル領域(SGA)とインスタンス・プログラム・グローバル領域(インスタンスPGA)です。Oracle Databaseでは様々なメモリー管理方法がサポートされており、これらは初期化パラメータの設定で選択されます。自動メモリー管理と呼ばれる方法をお薦めします。

自動メモリー管理

Oracle DatabaseはSGAメモリーとインスタンスPGAメモリーを完全に自動的に管理できます。インスタンスで使用される合計メモリー・サイズを指定するだけで、Oracle Databaseが必要に応じてSGAとインスタンスPGAの間でメモリーを動的に交換し、処理ニーズに対応します。この機能を自動メモリー管理と呼びます。このメモリー管理の方法では、データベースは個別SGAコンポーネントのサイズと個別PGAのサイズも動的にチューニングします。

手動メモリー管理

個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を使用禁止にして、手動メモリー管理用にデータベースを構成できます。手動メモリー管理として使用できる方法はいくつかあります。これらの方法には、自動の部分が、ある度合で残っているものがあります。それらの方法では、DBAに要求される作業量および知識量が異なります。次の方法があります。

  • 自動共有メモリー管理: SGA用

  • 手動共有メモリー管理: SGA用

  • 自動PGAメモリー管理: インスタンスPGA用

  • 手動PGAメモリー管理: インスタンスPGA用

これらのメモリー管理方法については、この章で後述します。

Database Configuration Assistant (DBCA)を使用してデータベースを作成する際に基本インストール・オプションを選択すると、システム・メモリーが4GB以下である場合、自動メモリー管理が使用可能になります。システム・メモリーが4GBを超える場合は、自動メモリー管理は使用禁止になり、自動共有メモリー管理が使用可能になります。拡張インストールを選択した場合は、DBCAを使用して、自動メモリー管理または自動共有メモリー管理を選択できます。

注意:

メモリーを管理する最も簡単な方法は、Oracle Enterprise Manager Database Express (EM Express)またはOracle Enterprise Manager Cloud Control (Cloud Control)のグラフィカル・ユーザー・インタフェースを使用する方法です。

EM Expressを使用したメモリー管理の詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

Cloud Controlを使用したメモリー管理の詳細は、Cloud Controlのオンライン・ヘルプを参照してください。

関連項目:

メモリーの自動管理および手動管理の様々な方法については、『Oracle Database概要』を参照してください。

6.2 メモリー・アーキテクチャの概要

Oracle Databaseに関連する基本メモリー構造を理解します。

Oracle Databaseに関連する基本的なメモリー構造は、次のような領域で構成されています。

  • システム・グローバル領域(SGA)

    SGAは、SGAコンポーネントと呼ばれる共有メモリー構造のグループで、1つのOracle Databaseインスタンスに関するデータと制御情報が保存されています。SGAは、すべてのサーバー・プロセスとバックグラウンド・プロセスで共有されます。SGAに格納されるデータには、キャッシュ・データ・ブロックや共有SQL領域などがあります。

  • プログラム・グローバル領域(PGA)

    PGAは、サーバー・プロセスのデータおよび制御情報が含まれるメモリー領域です。これはサーバー・プロセスの開始時にOracle Databaseによって作成される非共有メモリーです。PGAへのアクセスは、サーバー・プロセスごとに排他的です。各サーバー・プロセスごとに1つのPGAが存在します。バックグラウンド・プロセスにも独自のPGAが割り当てられます。Oracle Databaseインスタンスに連結されるすべてのバックグラウンドおよびサーバー・プロセスに割り当てられるPGAメモリーの合計はインスタンスPGAメモリー合計と呼ばれ、個々のPGAの集合はインスタンスPGA合計、または単にインスタンスPGAと呼ばれます。

図6-1に、これらのメモリー構造の関係を示します。

図6-1 Oracle Databaseのメモリー構造

図6-1の説明が続きます
「図6-1 Oracle Databaseのメモリー構造」の説明

データベースがSolarisまたはOracle Linux上で稼働している場合、オプションで別のメモリー・コンポーネント、Database Smart Flash Cacheもオプションで追加できます。Database Smart Flash Cacheは、SGAに常駐するバッファ・キャッシュの拡張機能で、データベース・ブロックにレベル2のキャッシュを提供します。これにより、読取り集中型のオンライン・トランザクション処理(OLTP)ワークロードと非定型問合せの両方、およびデータ・ウェアハウス環境での大量データ変換について、応答時間およびスループット全体を改善できます。Database Smart Flash Cacheは、フラッシュ・メモリーを使用するソリッド状態の記憶装置である1つ以上のフラッシュ・ディスク装置に常駐します。Database Smart Flash Cacheは、一般的に、メイン・メモリーの増設よりも経済的であり、かつ、ディスク・ドライブよりもはるかに高速です。

Oracle Database 12cリリース1 (12.1.0.2)以上では、大規模表キャッシュにより、シリアル問合せおよびパラレル問合せでバッファ・キャッシュを使用できるようになります。大規模表キャッシュは、データ・ウェアハウス環境の大規模表について、このような表がバッファ・キャッシュに完全には収まらない場合でも、効率的なキャッシングを簡単にできるようにします。表スキャンでは、次の場合に大規模表キャッシュを使用できます。

  • パラレル問合せ

    シングル・インスタンス・データベースおよびOracle Real Application Clusters (Oracle RAC)データベースで、DB_BIG_TABLE_CACHE_PERCENT_TARGET初期化パラメータがゼロ以外の値に設定され、PARALLEL_DEGREE_POLICYAUTOまたはADAPTIVEに設定されている場合、パラレル問合せで大規模表キャッシュを使用できます。

  • シリアル問合せ

    シングル・インスタンス構成のみで、DB_BIG_TABLE_CACHE_PERCENT_TARGET初期化パラメータがゼロ以外の値に設定されている場合、シリアル問合せで大規模表キャッシュを使用できます。

関連項目:

  • 「Database Smart Flash Cacheの構成」

  • Oracle Databaseインスタンスのメモリー・アーキテクチャの詳細は、『Oracle Database概要』を参照してください。

  • DB_BIG_TABLE_CACHE_PERCENT_TARGET初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • PARALLEL_DEGREE_POLICY初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • 大規模表キャッシュの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

6.3 自動メモリー管理の使用

Oracle Databaseインスタンスが自動的にメモリーを管理およびチューニングできるようにすることができます。

6.3.1 自動メモリー管理の概要

インスタンス・メモリーを管理する最も単純な方法は、Oracle Databaseインスタンスで自動的に管理およびチューニングされるようにすることです。これを実行するには、ほとんどのプラットフォームの場合、ターゲット・メモリー・サイズ初期化パラメータ(MEMORY_TARGET)とオプションで最大メモリー・サイズ初期化パラメータ(MEMORY_MAX_TARGET)のみを設定します。

インスタンスによって使用される合計メモリーはMEMORY_TARGETの値に基づき、相対的に一定なままとなり、メモリーはインスタンスによってシステム・グローバル領域(SGA)とインスタンス・プログラム・グローバル領域(インスタンスPGA)の間で自動的に配分されます。メモリー要件の変化に応じて、メモリーはインスタンスによってSGAとインスタンスPGAの間で動的に再配分されます。

自動メモリー管理が有効化されていない場合は、SGAとインスタンスPGAの両方を手動でサイズ設定する必要があります。

MEMORY_TARGET初期化パラメータは動的であるため、データベースの再起動なしにいつでもMEMORY_TARGETを変更できます。MEMORY_MAX_TARGETは動的ではなく、誤ってMEMORY_TARGETを高く設定しすぎないための上限として機能し、今後インスタンス・メモリーの合計を増加する際に、データベース・インスタンス用に十分なメモリーを確保するために使用されます。また、一部のSGAコンポーネントは簡単に縮小できないか、または最小サイズに抑える必要があるため、インスタンスではユーザーがMEMORY_TARGETの設定を低くしすぎないようにします。

注意:

LOCK_SGA初期化パラメータがTRUEに設定されている場合は、自動メモリー管理を使用可能にできません。このパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

6.3.2 自動メモリー管理の有効化

データベースの作成時に(DBCAで適切なオプションを選択するか、またはCREATE DATABASE SQL文に適切な初期化パラメータを設定して)自動メモリー管理を使用可能にしなかった場合は、後で自動メモリー管理を使用可能にできます。自動メモリー管理を有効化する場合は、データベースを停止して再起動する必要があります。

自動メモリー管理を使用可能にする手順は、次のとおりです。:

  1. SQL*Plusを起動して、SYSDBA管理権限でOracle Databaseインスタンスに接続します。

    手順については、「SQL*Plusを使用したデータベースへの接続」および「データベース管理者の認証」を参照してください。

  2. MEMORY_TARGETの最小値を次の方法で計算します。

    1. 次のSQL*Plusコマンドを入力して、SGA_TARGETおよびPGA_AGGREGATE_TARGETの現行サイズ(MB)を確認します。

      SHOW PARAMETER SGA_TARGET
      
      NAME                                 TYPE        VALUE
      ------------------------------------ ----------- --------------------------
      sga_target                           big integer 272M
      
      SHOW PARAMETER PGA_AGGREGATE_TARGET
      
      NAME                                 TYPE        VALUE
      ------------------------------------ ----------- --------------------------
      pga_aggregate_target                 big integer 90M
      

      SGA_TARGETパラメータが未設定の場合、その設定の詳細は、「自動共有メモリー管理を使用可能にする方法」を参照してください。

    2. 次の問合せを実行して、データベースの起動以降に割り当てられた最大インスタンスPGA (MB)を確認します。

      SELECT VALUE/1048576 FROM V$PGASTAT WHERE NAME='maximum pga allocated';
      
    3. 手順2bおよびPGA_AGGREGATE_TARGETの問合せの結果を比較して最大値を算定します。この値にSGA_TARGETを加算します。

      MEMORY_TARGET = SGA_TARGET + MAX(PGA_AGGREGATE_TARGET, MAXIMUM PGA ALLOCATED)
      

    たとえば、前述のようにSGA_TARGETが272M、PGA_AGGREGATE_TARGETが90Mで、割当て済の最大PGAが120Mと確認された場合、MEMORY_TARGETは392M(272M + 120M)以上にする必要があります。

  3. 使用するMEMORY_TARGETの値を選択します。

    この値は、手順2で計算した最小値にするか、または使用可能な物理メモリーが十分ある場合はこれより大きい値を使用できます。

  4. MEMORY_MAX_TARGET初期化パラメータについては、予測可能な範囲で、データベースに割り当てる予定の最大メモリー量に決定します。つまり、SGAとインスタンスPGAサイズの合計に対する最大値を決定します。この値は、前述の手順で選択したMEMORY_TARGETの値以上に設定できます。

  5. 次のいずれかを実行します。

    • Oracle Databaseインスタンスをサーバー・パラメータ・ファイルを使用して起動(Database Configuration Assistant(DBCA)を使用してデータベースを作成した場合のデフォルト)した場合は、次のコマンドを入力します。

      ALTER SYSTEM SET MEMORY_MAX_TARGET = nM SCOPE = SPFILE;
      

      nは手順4で計算した値です。

      SCOPE = SPFILE句を指定すると、サーバー・パラメータ・ファイル内の値のみが設定され、実行中のインスタンスに対する値は設定されません。MEMORY_MAX_TARGETは動的な初期化パラメータではないため、このSCOPE句を組み込む必要があります。

    • インスタンスをテキスト形式の初期化パラメータ・ファイルを使用して起動した場合は、ファイルを手動で編集して次の文を組み込みます。

      memory_max_target = nM
      memory_target = mM
      

      nは手順4で決定した値、mは手順3で決定した値です。

    注意:

    テキスト形式の初期化パラメータ・ファイルでは、MEMORY_MAX_TARGETの行を省略してMEMORY_TARGETの値を指定した場合、データベースによって、MEMORY_MAX_TARGETMEMORY_TARGETの値に自動的に設定されます。MEMORY_TARGETの行を省略してMEMORY_MAX_TARGETを指定した場合、MEMORY_TARGETパラメータはデフォルトで0 (ゼロ)に設定されます。起動後、MEMORY_MAX_TARGETの値を超えないかぎり、MEMORY_TARGETを0以外の値に動的に変更できます。

  6. データベースを停止して再起動します。

    手順については、「起動と停止」を参照してください。

  7. Oracle Databaseインスタンスをサーバー・パラメータ・ファイルを使用して起動した場合は、次のコマンドを入力します。

    ALTER SYSTEM SET MEMORY_TARGET = nM;
    ALTER SYSTEM SET SGA_TARGET = 0;
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 0;
    

    nは手順3で決定した値です。

注意:

MEMORY_TARGETを設定すると、SGA_TARGET設定はSGAの最小サイズになり、PGA_AGGREGATE_TARGET設定はインスタンスPGAの最小サイズになります。説明したようにこの両方をゼロに設定すると、最小値の設定がなくなり、SGAおよびインスタンスPGAは、その合計がMEMORY_TARGET設定以下であれば、必要に応じて大きくなります。SQL作業領域のサイズ変更は、自動のままです。

SGA_TARGETおよびPGA_AGGREGATE_TARGETのパラメータ値を0(ゼロ)に設定する文を省略し、いずれかまたは両方の値を正数にしておくことができます。この場合、値はSGAまたはインスタンスPGAのサイズの最小値として機能します。

また、PGA_AGGREGATE_LIMIT初期化パラメータを使用して、PGAメモリーにインスタンス全体の厳格な制限を設定することもできます。PGA_AGGREGATE_LIMITは、自動メモリー管理を使用しているかどうかに関係なく設定できます。「自動PGAメモリー管理の使用」を参照してください。

関連項目:

6.3.3 自動メモリー管理の監視およびチューニング

動的なパフォーマンス・ビューV$MEMORY_DYNAMIC_COMPONENTSに、SGAとインスタンスPGAの合計サイズなど、動的にチューニングされたすべてのメモリー・コンポーネントの現行サイズが示されます。

  • MEMORY_TARGET初期化パラメータのチューニング・アドバイスについては、V$MEMORY_TARGET_ADVICEビューを問い合せます。

たとえば、次の問合せを実行します。

SQL>  select * from v$memory_target_advice order by memory_size;
 
MEMORY_SIZE MEMORY_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR    VERSION
----------- ------------------ ------------ ------------------- ----------
        180                 .5          458               1.344          0
        270                .75          367              1.0761          0
        360                  1          341                   1          0
        450               1.25          335               .9817          0
        540                1.5          335               .9817          0
        630               1.75          335               .9817          0
        720                  2          335               .9817          0

MEMORY_SIZE_FACTORが1の行には、MEMORY_TARGET初期化パラメータで設定されたメモリーの現行サイズ、および現行のワークロードを完了するために必要なDB時間の量が示されています。上下の行の結果には、いくつかのMEMORY_TARGETの代替サイズが示されています。各代替サイズについて、サイズ・ファクタ(現行サイズの乗数)、MEMORY_TARGETパラメータが代替サイズに変更された場合に現行のワークロードを完了するために必要な見積DB時間が示されます。合計メモリー・サイズがMEMORY_TARGETの現行サイズより小さい場合は、見積DB時間が増加していることに注意してください。また、この例では、合計メモリー・サイズを450MBより大きくしても効果がないことに注意してください。ただし、ワークロード全体がまだ実行されていない場合、この状況は変わる可能性があります。

EM Expressには、MEMORY_TARGETの最適なサイズを選択できる使いやすいグラフィカル・メモリー・アドバイザが用意されています。詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

関連項目:

  • V$MEMORY_DYNAMIC_COMPONENTS動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • V$MEMORY_TARGET_ADVICE動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • DB時間の定義については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

6.4 メモリーの手動構成

個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を使用禁止にして、手動メモリー管理用にデータベースを構成できます。

6.4.1 手動メモリー管理の概要

SGAおよびインスタンスPGAについて、それぞれ2つの異なる手動メモリー管理方法があります。

SGAの2つの手動メモリー管理方法では、DBAに要求される作業量および知識量が異なります。自動共有メモリー管理では、SGAのターゲット・サイズと最大サイズを設定します。設定後、データベースによって、SGAの合計サイズが指定したターゲットに適合するように設定され、多数のSGAコンポーネントのサイズが動的にチューニングされます。手動共有メモリー管理では、複数の個別SGAコンポーネントのサイズを設定することで、SGA全体のサイズを決定します。その後、個別SGAコンポーネントを継続的に手動でチューニングします。

インスタンスPGAに関しては、自動PGAメモリー管理があり、インスタンスPGAのターゲット・サイズを設定します。設定後、データベースによって、インスタンスPGAのサイズが指定したターゲットに適合するように設定され、個々のPGAのサイズが動的にチューニングされます。また、手動PGAメモリー管理では、各タイプのSQL演算子(ソートやハッシュ結合など)のタイプごとに作業領域の最大サイズを設定します。このメモリー管理方法は、サポートされていますがお薦めしません。

関連項目:

Oracle Databaseのメモリー管理方法の概要は、『Oracle Database概要』を参照してください。

6.4.2 自動共有メモリー管理の使用

自動共有メモリー管理によってSGAメモリー管理が簡素化されます。

関連項目:

  • SGAのコンポーネントのチューニング方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

6.4.2.1 自動共有メモリー管理の概要

自動共有メモリー管理では、SGA_TARGET初期化パラメータを使用してインスタンスに使用可能なSGAメモリーの合計量を指定し、メモリーを最も効率的に使用できるようにするために、Oracle Databaseが様々なSGAコンポーネントにこのメモリーを自動的に配分します。

自動共有メモリー管理が使用可能な場合、様々なSGAコンポーネントのサイズは自由に変更され、ワークロードのニーズにあわせてチューニングされるため、追加構成の必要はありません。データベースによって、必要に応じて使用可能なメモリーが様々なコンポーネントに自動的に配分されるため、システムでは使用可能なすべてのSGAメモリーを最大限に使用できます。

サーバー・パラメータ・ファイル(SPFILE)を使用している場合、データベースでは、自動チューニングされたSGAコンポーネントのサイズがインスタンス停止後も保持されます。このため、データベース・インスタンスでは、インスタンスが起動するたびにワークロードの特性を再度認識する必要がありません。インスタンスでは、以前のインスタンスの情報に基づいて、前回インスタンスが停止した時点でのワークロードを継続して評価できます。

6.4.2.2 SGAのコンポーネントおよびグラニュル

SGAは、特定のクラスのメモリー割当て要求を満たすために使用されるメモリーのプールであるいくつかのメモリー・コンポーネントで構成されます。

メモリー・コンポーネントの例として、共有プール(SQLおよびPL/SQL実行のメモリー割当てに使用)、Javaプール(Javaオブジェクトおよびその他のJava実行メモリーに使用)、およびバッファ・キャッシュ(キャッシュ・ディスク・ブロックに使用)などがあります。すべてのSGAコンポーネントがグラニュルという単位で領域を割当ておよび割当て解除します。Oracle Databaseは、各SGAコンポーネントに対するグラニュルの内部数でSGAメモリーの使用状況を追跡します。

SGAの動的コンポーネント用のメモリーは、グラニュル単位で割り当てられます。グラニュル・サイズは、インスタンスが起動するときに要求されるSGAメモリーの量によって決まります。グラニュル・サイズは、SGA_MAX_SIZE初期化パラメータの値に基づいています。表6-1は、SGAメモリーの様々な量でのグラニュル・サイズを示しています。

表6-1 グラニュル・サイズ

SGAメモリーの量 グラニュル・サイズ

1GB以下

4MB

1GBより大きく8GB以下

16MB

8GBより大きく16GB以下

32MB

16GBより大きく32GB以下

64MB

32GBより大きく64GB以下

128MB

64GBより大きく128GB以下

256MB

128GBよりも大きい

512MB

一部にプラットフォーム依存性が存在する場合があります。詳細は、使用しているオペレーティング・システム固有のマニュアルを参照してください。

V$SGAINFOビューを問い合せると、インスタンスで使用中のグラニュル・サイズを確認できます。SGAのすべてのコンポーネントに、同じグラニュル・サイズが使用されます。

コンポーネントに対してグラニュル・サイズの倍数でないサイズを指定すると、そのサイズは最も近い倍数に繰り上げられます。たとえば、グラニュル・サイズが4MBの場合にDB_CACHE_SIZEを10MBとして指定すると、実際には12MBが割り当てられます。

6.4.2.3 最大SGAサイズの設定

インスタンスの存続期間中のシステム・グローバル領域の最大サイズは、SGA_MAX_SIZE初期化パラメータによって決まります。

システム・グローバル領域の最大サイズを設定するには:

  • SGA_MAX_SIZE初期化パラメータを設定します。

バッファ・キャッシュ、共有プール、ラージ・プール、JavaプールおよびStreamsプールのサイズに影響を与える初期化パラメータは動的に変更できますが、これらのサイズとSGAの他のコンポーネント(固定SGA、可変SGAおよびREDOログ・バッファ)のサイズとの合計が、SGA_MAX_SIZEで指定された値を超えるような変更はできません。

SGA_MAX_SIZEが指定されていない場合は、初期化時に指定またはデフォルト設定されたコンポーネントすべての合計がデフォルト値として選択されます。SGA_MAX_SIZEに指定した値が、データベースの初期化時に、すべてのコンポーネントに対してパラメータ・ファイルで明示的にまたはデフォルトで割り当てたメモリーの合計より少ない場合、SGA_MAX_SIZEの設定は無視され、このパラメータに対する適切な値が選択されます。

6.4.2.4 SGAターゲット・サイズの設定

自動共有メモリー管理機能を有効にするには、SGA_TARGET初期化パラメータを0(ゼロ)以外の値に設定します。このパラメータにより、SGAの合計サイズが設定されます。これは、個別のコンポーネントのセットの割当てメモリーを制御するパラメータにかわるもので、これらは必要に応じて自動的かつ動的にサイズ調整(チューニング)されるようになりました。

自動共有メモリー管理機能を有効にするには:

  • SGA_TARGET初期化パラメータをゼロ以外の値に設定します。

注意:

  • 自動共有メモリー管理が機能するには、STATISTICS_LEVEL初期化パラメータがTYPICAL(デフォルト)またはALLに設定されている必要があります。

  • より簡単に自動共有メモリー管理を使用可能にするには、EM Expressを使用します。自動共有メモリー管理を使用可能にし、合計SGAサイズを設定すると、EM ExpressによってALTER SYSTEM文が自動的に生成され、SGA_TARGETが指定したサイズに設定され、自動サイズ設定SGAコンポーネントがすべてゼロに設定されます。詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

SQL*Plusを使用してSGA_TARGETを設定する場合は、自動的にサイズ調整されるSGAコンポーネントを0(ゼロ)または最小値に設定する必要があります。

6.4.2.4.1 SGAターゲットと自動的にサイズ調整されるSGAコンポーネント

SGA_TARGETを設定すると、いくつかのSGAコンポーネントが自動的にサイズ調整されます。

次の表に、SGA_TARGETを設定すると自動的にサイズ調整されるSGAコンポーネントを示します。各SGAコンポーネントについては、関連する初期化パラメータを示します。

表6-2 自動サイズ設定SGAコンポーネントと対応するパラメータ

SGAコンポーネント 初期化パラメータ

固定SGAおよびOracle Databaseインスタンスに必要なその他の内部割当て

N/A

共有プール

SHARED_POOL_SIZE

ラージ・プール

LARGE_POOL_SIZE

Javaプール

JAVA_POOL_SIZE

バッファ・キャッシュ

DB_CACHE_SIZE

Streamsプール

STREAMS_POOL_SIZE

表6-3にリストされているパラメータは、設定された場合、SGA_TARGETからメモリーを取得しますが、表6-2にリストされたコンポーネントに使用されるメモリーは残されます。

表6-3 SGA_TARGETの領域を使用する手動サイズ設定SGAコンポーネント

SGAコンポーネント 初期化パラメータ

ログ・バッファ

LOG_BUFFER

KEEPバッファ・キャッシュおよびRECYCLEバッファ・キャッシュ

DB_KEEP_CACHE_SIZE

DB_RECYCLE_CACHE_SIZE

非標準ブロック・サイズ・バッファ・キャッシュ

DB_nK_CACHE_SIZE

SGA_TARGETを0(ゼロ)以外の値に設定する以外に、自動サイズ設定SGAコンポーネントの完全な自動チューニングを使用可能にするために、表6-2に示されているすべての初期化パラメータを0(ゼロ)に設定する必要があります。

または、自動サイズ設定SGAコンポーネントを0(ゼロ)以外の値に設定すると、その値がSGAチューニング中のコンポーネントの最小設定として使用されます。詳細は後に説明します。

6.4.2.4.2 SGAおよび仮想メモリー

ほとんどのシステムで最適なパフォーマンスを実現するには、SGA全体が実メモリーに収まる必要があります。実メモリーに収まらず、その一部を格納するために仮想メモリーが使用される場合は、データベース・システム全体のパフォーマンスが大幅に低下する可能性があります。これは、オペレーティング・システムによってSGAの一部でページング(ディスクの読取りおよび書込み)が実行されるためです。

ページング・アクティビティを監視する方法は、使用しているオペレーティング・システムのマニュアルを参照してください。Cloud Controlを使用して、ページング・アクティビティを表示することもできます。詳細は、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。

6.4.2.4.3 SGAターゲット・サイズの監視およびチューニング

V$SGAINFOビューでは、様々なSGAコンポーネントの現行のチューニング・サイズに関する情報が提供されます。V$SGA_TARGET_ADVICEビューでは、SGA_TARGETの値の決定に役立つ情報が提供されます。

SGAターゲット・サイズを監視およびチューニングするには:

  • V$SGAINFOおよびV$SGA_TARGET_ADVICEビューを問い合せます。

たとえば、次の問合せを実行します。

SQL> select * from v$sga_target_advice order by sga_size;
 
  SGA_SIZE SGA_SIZE_FACTOR ESTD_DB_TIME ESTD_DB_TIME_FACTOR ESTD_PHYSICAL_READS
---------- --------------- ------------ ------------------- -------------------
       290              .5       448176              1.6578             1636103
       435             .75       339336              1.2552             1636103
       580               1       270344                   1             1201780
       725            1.25       239038               .8842              907584
       870             1.5       211517               .7824              513881
      1015            1.75       201866               .7467              513881
      1160               2       200703               .7424              513881

このビューの情報は、自動メモリー管理用のV$MEMORY_TARGET_ADVICEビューで提供される情報と同じです。このビューについては、「自動メモリー管理の監視およびチューニング」を参照してください。

EM Expressには、SGA_TARGETの最適なサイズを選択できる使いやすいグラフィカル・メモリー・アドバイザが用意されています。詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

関連項目:

  • V$SGAINFOビューの詳細は、『Oracle Databaseリファレンス』を参照してください

  • V$SGA_TARGET_ADVICEビューの詳細は、『Oracle Databaseリファレンス』を参照してください

6.4.2.5 自動共有メモリー管理を使用可能にする方法

自動共有メモリー管理(ASMM)を使用可能にする手順は、手動共有メモリー管理からASMMに変更するか、自動メモリー管理からASMMに変更するかによって異なります。

手動共有メモリー管理からASMMに変更する手順は、次のとおりです。

  1. 次の問合せを実行してSGA_TARGETの値を取得します。

    SELECT (
       (SELECT SUM(value) FROM V$SGA) -
       (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
       ) "SGA_TARGET"
    FROM DUAL;
    
  2. テキスト形式の初期化パラメータ・ファイルを編集してデータベースを再起動するか、または次の文を発行してSGA_TARGETの値を設定します。

    ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]
    

    valueは手順1で計算した値、またはすべてのSGAコンポーネント・サイズの合計とSGA_MAX_SIZEの間の値です。ALTER SYSTEM文とそのSCOPE句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

  3. 次のいずれかを実行します。

    • より完全な自動チューニングを行うには、表6-2に記載されている自動サイズ設定SGAコンポーネントの値を0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、またはALTER SYSTEM文を発行します。

    • 1つ以上の自動サイズ設定SGAコンポーネントの最小サイズを制御するには、これらのコンポーネントのサイズを目的の値に設定します。(詳細は、次の項を参照してください。)その他の自動サイズ設定SGAコンポーネントの値を0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、またはALTER SYSTEM文を発行します。

自動メモリー管理からASMMに変更する手順は、次のとおりです。

  1. MEMORY_TARGET初期化パラメータを0(ゼロ)に設定します。
    ALTER SYSTEM SET MEMORY_TARGET = 0;
    

    データベースによって、現在のSGAメモリー割当てに基づいてSGA_TARGETが設定されます。

  2. 次のいずれかを実行します。
    • より完全な自動チューニングを行うには、表6-2に記載されている自動サイズ設定SGAコンポーネントのサイズを0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、またはALTER SYSTEM文を発行します。

    • 1つ以上の自動サイズ設定SGAコンポーネントの最小サイズを制御するには、これらのコンポーネントのサイズを目的の値に設定します。(詳細は、次の項を参照してください。)その他の自動サイズ設定SGAコンポーネントのサイズを0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、またはALTER SYSTEM文を発行します。

例6-1 ASMMの使用

たとえば、手動共有メモリー管理用にインスタンスのパラメータが現在次のように構成されていて、SGA_MAX_SIZEが1200Mに設定されているとします。

  • SHARED_POOL_SIZE = 200M

  • DB_CACHE_SIZE = 500M

  • LARGE_POOL_SIZE = 200M

また、問合せが次のような結果であるとします。

問合せ 結果

SELECT SUM(value) FROM V$SGA

1200M

SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY

208M

次の文を発行することによって、自動共有メモリー管理を活用できます。

ALTER SYSTEM SET SGA_TARGET = 992M;
ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
ALTER SYSTEM SET DB_CACHE_SIZE = 0;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;

992Mは、1200M - 208Mから算出された値です。

6.4.2.6 自動サイズ設定SGAコンポーネントの最小値の設定

自動サイズ設定SGAコンポーネントに対応するパラメータに最小値を指定して、これらのコンポーネントのサイズをある程度制御できます。この設定は、特定のコンポーネントで最低限のメモリーが確保されていないとアプリケーションが正しく動作しないことがわかっている場合に便利です。

コンポーネントのためのSGA領域の最小値を指定するには:

  • 対応する初期化パラメータの値を設定します。

1つ以上の自動サイズ設定コンポーネントの最小サイズを手動で制限すると、動的な調整に使用されるメモリーの合計量が減少します。この量が減少すると、システムがワークロードの変動に適応するシステムの機能が次々に制限されます。したがって、この方法は特別な場合を除いてお薦めしません。デフォルトの自動管理は、システム・パフォーマンスおよび使用可能なリソースの使用が最大になるように動作します。

6.4.2.7 SGA_TARGETの動的変更

SGA_TARGETパラメータは、SGA_MAX_SIZEパラメータに指定された値まで動的に増やすことができ、減らすこともできます。

SGA_TARGETの値を減らした場合は、メモリーを解放する1つ以上の自動調整コンポーネントがシステムによって識別されます。SGA_TARGETは、1つ以上の自動調整コンポーネントがその最小サイズに達するまで減らすことができます。Oracle Databaseでは、SGA_TARGETの最小許容値を決定するときに、自動サイズ設定コンポーネントに設定された値、SGA_TARGET領域を使用する手動サイズ設定コンポーネント、CPUの数など、いくつかの要因が考慮されます。

SGA_TARGETが変更されたときに、消費される物理メモリーの量の変更は、オペレーティング・システムによって異なります。動的共有メモリーをサポートしない一部のUNIXプラットフォームでは、SGAで使用される物理メモリーはSGA_MAX_SIZEパラメータの値と同じです。SGA_TARGETSGA_MAX_SIZEより小さい値に設定した場合、このようなプラットフォームでは実際の利点はありません。したがって、これらのプラットフォームでは、SGA_MAX_SIZEを設定しないことをお薦めします。

SolarisやWindowsなどの他のプラットフォームでは、SGAで消費される物理メモリーはSGA_TARGETと同じです。

たとえば、次のような構成環境とします。

  • SGA_MAX_SIZE = 1024M

  • SGA_TARGET = 512M

  • DB_8K_CACHE_SIZE = 128M

この例では、SGA_TARGETは1024Mまでサイズを増やすことができ、自動サイズ設定コンポーネントの1つ以上がその最小サイズに達するまでサイズを減らすこともできます。正確な値は、システムのCPU数などの環境要因によって決定します。ただし、DB_8K_CACHE_SIZEの値は常に128Mで固定です。

注意:

自動共有メモリー管理機能を使用可能にする場合、データベースを起動する前に、SGA_TARGETを0(ゼロ)以外の目的の値に設定しておくことをお薦めします。SGA_TARGETを0(ゼロ)から0(ゼロ)以外の値に動的に変更しても、共有プールを縮小できない場合があるため、目的の結果が得られないことがあります。起動後も、必要に応じてSGA_TARGETの値を動的に増減できます。

6.4.2.8 自動サイズ設定コンポーネントのパラメータの変更

自動共有メモリー管理が有効な場合、自動的にサイズ調整されるコンポーネントに手動で指定したサイズは、コンポーネントのサイズの下限としての役割を果たします。この制限は、対応するパラメータの値を変更することで動的に変更できます。

特定のSGAコンポーネントに指定したサイズの下限が現在のサイズより小さい場合、そのコンポーネントのサイズはすぐには変更されません。新しい設定は自動チューニング・アルゴリズムを将来において減少した最小サイズに制限するのみです。

コンポーネント・サイズの下限を設定するには:

  • コンポーネントの初期化パラメータを最小値に設定します。

たとえば、次のような構成を考えてみます。

  • SGA_TARGET = 512M

  • LARGE_POOL_SIZE = 256M

  • 現在の実際のラージ・プール・サイズ = 284M

この例では、LARGE_POOL_SIZEの値をコンポーネントの実際の現在のサイズよりも大きい値に増加すると、増加した最小サイズに対応するように、システムによってコンポーネントが拡大されます。たとえば、LARGE_POOL_SIZEの値を300Mに増加すると、ラージ・プールが300Mに達するまで増分的に増加されます。このサイズ変更は、1つ以上の自動調整コンポーネントを犠牲にして行われます。LARGE_POOL_SIZEの値を200に減らした場合、そのコンポーネントのサイズはすぐには変更されません。新しい設定は、後のラージ・プール・サイズの削減のみを200Mに制限します。

注意:

SGA_TARGETが設定されていない場合、自動共有メモリー管理機能は使用できません。したがって、すべてのコンポーネント・パラメータのサイズ変更に関するルールは、以前のリリースの場合と同じです。

6.4.2.9 手動サイズ設定コンポーネントのパラメータの変更

手動サイズ設定コンポーネントのパラメータも動的に変更できます。ただし、最小サイズは設定しないで、パラメータの値によって、対応するコンポーネントの正確なサイズを指定します。

手動サイズ設定コンポーネントのサイズを増やすと、余分なメモリーが1つ以上の自動サイズ設定コンポーネントから削除されます。手動サイズ設定コンポーネントのサイズを減らすと、解放されたメモリーが複数の自動サイズ設定コンポーネントに提供されます。

コンポーネントの正確なサイズを変更するには:

  • コンポーネントの初期化パラメータを設定します。

たとえば、次のような構成を考えてみます。

  • SGA_TARGET = 512M

  • DB_8K_CACHE_SIZE = 128M

この例のDB_8K_CACHE_SIZEを16M増やして144Mにすると、その16Mが、自動サイズ設定コンポーネントから削除されます。同様に、DB_8K_CACHE_SIZEを16M減らして112Mにすると、その16Mが、自動サイズ設定コンポーネントに提供されます。

6.4.3 手動共有メモリー管理の使用

共有メモリーを手動で管理するには、最初に、自動メモリー管理と自動共有メモリー管理がどちらも無効になっていることを確認します。その次に、メモリー・コンポーネントを手動で構成、監視およびチューニングします。

6.4.3.1 手動共有メモリー管理の概要

自動メモリー管理または自動共有メモリー管理を使用しない場合は、いくつかのSGAコンポーネントのサイズを手動で構成し、データベース・ワークロードの変更に基づいてこれらのサイズを監視およびチューニングする必要があります。これらのSGAコンポーネントのサイズを制御するパラメータの設定のガイドラインに従うことができます。

DBCAを使用してデータベースを作成し、手動共有メモリー管理を選択した場合、バッファ・キャッシュ、共有プール、ラージ・プールおよびJavaプールのサイズを入力する必須フィールドがDBCAで表示されます。次に、対応する初期化パラメータが、作成されるサーバー・パラメータ・ファイル(SPFILE)に設定されます。かわりにデータベースをCREATE DATABASE SQL文とテキスト初期化パラメータ・ファイルで作成した場合、次のいずれかを実行します。

  • SGAコンポーネント・サイズを設定する初期化パラメータの値を指定します。

  • テキスト形式の初期化ファイルからSGAコンポーネント・サイズのパラメータを削除します。サイズを設定していないコンポーネントに対しては、Oracle Databaseによって適切なデフォルトが選択されます。

6.4.3.2 手動共有メモリー管理を使用可能にする方法

手動共有メモリー管理自体を使用可能にする初期化パラメータはありません。自動メモリー管理と自動共有メモリー管理の両方を使用禁止にすることによって、手動共有メモリー管理が事実上使用可能になります。

手動共有メモリー管理を使用可能にする手順は、次のとおりです。

  1. MEMORY_TARGET初期化パラメータを0(ゼロ)に設定します。
  2. SGA_TARGET初期化パラメータを0(ゼロ)に設定します。

次に、以降の項の説明に従って、様々なSGAコンポーネントの値を設定する必要があります。

6.4.3.3 バッファ・キャッシュ初期化パラメータの設定

SGAコンポーネントであるバッファ・キャッシュのサイズは、バッファ・キャッシュ初期化パラメータによって決まります。

これらのパラメータを使用して、データベースで使用される各ブロック・サイズのキャッシュ・サイズを指定します。これらの初期化パラメータはすべて動的です。

バッファ・キャッシュのサイズはパフォーマンスに影響を及ぼします。一般に、キャッシュ・サイズを大きくすると、ディスクの読取りと書込みの回数が少なくなります。ただし、キャッシュを大きくすると、メモリーを過度に消費してページングやスワッピングが発生する可能性があります。

Oracle Databaseでは、データベース内で複数のブロック・サイズがサポートされます。非標準のブロック・サイズを設定した表領域を作成する場合は、これらの表領域を格納するための非標準のブロック・サイズ・バッファを構成する必要があります。SYSTEM表領域には標準のブロック・サイズが使用されます。標準のブロック・サイズを指定するには、初期化パラメータDB_BLOCK_SIZEを設定します。指定できる値は2Kから32Kです。

データベースで複数のブロック・サイズを使用する場合は、DB_CACHE_SIZEと、少なくとも1つのDB_nK_CACHE_SIZEパラメータを設定する必要があります。Oracle Databaseは、DB_CACHE_SIZEパラメータに適切なデフォルト値を割り当てますが、DB_nK_CACHE_SIZEパラメータはデフォルトで0(ゼロ)に設定され、追加のブロック・サイズ・キャッシュは構成されません。

非標準のブロック・サイズ・バッファのサイズおよび数は、次のパラメータによって指定します。

DB_2K_CACHE_SIZE
DB_4K_CACHE_SIZE
DB_8K_CACHE_SIZE
DB_16K_CACHE_SIZE
DB_32K_CACHE_SIZE

各パラメータは、対応するブロック・サイズのキャッシュ・サイズを指定します。

注意:

  • 最大ブロック・サイズに関するプラットフォーム固有の制限が適用されるため、プラットフォームによっては、これらのサイズの一部は指定できない場合があります。

  • 32KBのブロック・サイズは、64ビットのプラットフォームでのみ有効です。

6.4.3.3.1 ブロック・サイズおよびキャッシュ・サイズの設定例

ブロック・サイズおよびキャッシュ・サイズの設定の例を示します。

DB_BLOCK_SIZE=4096
DB_CACHE_SIZE=1024M
DB_2K_CACHE_SIZE=256M
DB_8K_CACHE_SIZE=512M

この例では、パラメータDB_BLOCK_SIZEは、データベースの標準ブロック・サイズを4Kに設定しています。標準ブロック・サイズ・バッファのキャッシュ・サイズは1024MBです。また、2KBおよび8KBのキャッシュ・サイズがそれぞれ256MBと512MBで構成されます。

注意:

DB_nK_CACHE_SIZEパラメータを使用して、標準ブロック・サイズのキャッシュ・サイズを指定することはできません。DB_BLOCK_SIZEの値がnKBの場合にDB_nK_CACHE_SIZEを設定しても無効です。標準ブロック・サイズのキャッシュ・サイズは、常にDB_CACHE_SIZEの値によって決まります。

キャッシュのサイズは制限されているため、ディスク上のすべてのデータをキャッシュに格納することはできません。キャッシュが一杯の場合、その後キャッシュ・ミスが発生すると、新しいデータ用の領域を空けるために、Oracle Databaseはキャッシュにすでに存在する使用済データをディスクに書き込みます。(バッファが使用済でない場合、新しいブロックをバッファに読み込む前にディスクに書き込む必要はありません。)ディスクに書き込まれ、上書きされた結果がその後アクセスされると、さらにキャッシュ・ミスが発生します。

キャッシュのサイズは、データを要求したときにキャッシュ・ヒットになる確率に影響します。キャッシュが大きい場合は、要求されたデータがキャッシュに入っている可能性が高くなります。キャッシュのサイズを大きくすると、データ要求がキャッシュ・ヒットになる確率が高くなります。

インスタンスの実行中も、データベースを停止せずにバッファ・キャッシュのサイズを変更できます。この操作にはALTER SYSTEM文を使用します。

個々のキャッシュ・コンポーネントのサイズおよび保留中のサイズ変更操作を追跡するには、固定ビューV$BUFFER_POOLを使用します。

6.4.3.3.2 複数バッファ・プール

異なるバッファ・プールを持つデータベース・バッファ・キャッシュを構成して、バッファ・キャッシュ内にデータを保持するか、またはデータ・ブロックの使用直後に新しいデータがバッファを使用できるようにするかを指定できます。

その後、特定のスキーマ・オブジェクト(表、クラスタ、索引およびパーティション)を適切なバッファ・プールに割り当て、キャッシュからデータ・ブロックをエージ・アウトする方法を制御できます。

  • KEEPバッファ・プールでは、スキーマ・オブジェクトのデータ・ブロックがメモリーに保持されます。

  • RECYCLEバッファ・プールでは、データ・ブロックが不要になるとすぐにメモリーから除去されます。

  • DEFAULTバッファ・プールには、いずれのバッファ・プールにも割り当てられていないスキーマ・オブジェクトのデータ・ブロックと、明示的にDEFAULTプールに割り当てられたスキーマ・オブジェクトのデータ・ブロックが含まれます。

KEEPバッファ・プールとRECYCLEバッファ・プールを構成する初期化パラメータは、DB_KEEP_CACHE_SIZEDB_RECYCLE_CACHE_SIZEです。

注意:

複数バッファ・プールは、標準ブロック・サイズに対してのみ使用可能です。非標準ブロック・サイズのキャッシュには、1つのDEFAULTプールのみ使用できます。

関連項目:

バッファ・キャッシュのチューニング方法、および複数バッファ・プールの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

6.4.3.4 共有プール・サイズの指定

SHARED_POOL_SIZE初期化パラメータは、SGAのコンポーネントである共有プールのサイズを指定または調整する動的なパラメータです。Oracle Databaseによって適切なデフォルト値が選択されます。

Oracle Database 10gより前のリリースでは、割り当てられる共有プール・メモリーの量は、SHARED_POOL_SIZE初期化パラメータの値に、インスタンスの起動時に計算された内部SGAオーバーヘッドの量を加算した値と等しい値でした。内部SGAオーバーヘッドとは、他の複数の初期化パラメータの値に基づいて起動時にOracle Databaseによって割り当てられるメモリーです。このメモリーは、SGAの様々なサーバー・コンポーネントの状態を維持するために使用されます。たとえば、SHARED_POOL_SIZEパラメータが64MBに設定されていて、計算された内部SGAオーバーヘッドの値が12MBである場合、共有プールの実際のサイズは64+12=76MBですが、SHARED_POOL_SIZEパラメータの値は64MBと表示されます。

Oracle Database 10g以降では、内部SGAオーバーヘッドのサイズは、ユーザー指定のSHARED_POOL_SIZEの値に含まれます。つまり、自動メモリー管理または自動共有メモリー管理を使用していない場合、起動時に割り当てられる共有プール・メモリーの量はSHARED_POOL_SIZE初期化パラメータの値と等しくなり、グラニュル・サイズの倍数に丸められます。したがって、このパラメータには、必要な共有プール・サイズに内部SGAオーバーヘッドを加えた値を設定する必要があります。前述の例の場合、SHARED_POOL_SIZEパラメータが起動時に64MBに設定されているとすると、内部SGAオーバーヘッドの値が変わっていなければ、起動後に使用可能な共有プールの値は、64-12=52MBになります。起動後に共有プール・メモリーとして有効な値を64MB維持するには、SHARED_POOL_SIZEパラメータを64+12=76MBに設定する必要があります。

Oracle Database 10gよりも前のリリースから移行する場合、Oracle Database 12c移行ユーティリティにより、このパラメータの新しい値が、アップグレード前の環境での内部SGAオーバーヘッド値とこのパラメータの以前の値に基づいて推奨されます。Oracle Database 10g以降では、SGAの内部オーバーヘッド(共有プールの起動オーバーヘッドとも呼ばれます)の正確な値をV$SGAINFOビューから問い合せることができます。また、手動共有メモリー管理モードでは、ユーザーが指定したSHARED_POOL_SIZE値が内部SGAのオーバーヘッドの要件も満たせないほど小さい場合は、Oracle Databaseの起動時にORA-00371エラーが生成され、SHARED_POOL_SIZEパラメータの推奨値が示されます。Oracle Database 12cで自動共有メモリー管理を使用している場合は、共有プールが自動的に調整され、ORA-00371エラーは生成されません。

6.4.3.4.1 結果キャッシュと共有プール・サイズ

結果キャッシュのメモリーは共有プールから取得されます。したがって、結果キャッシュの最大サイズを大きくする場合は、共有プールのサイズ設定時にこのサイズを考慮する必要があります。

6.4.3.5 ラージ・プール・サイズの指定

LARGE_POOL_SIZE初期化パラメータは、SGAのコンポーネントであるラージ・プールのサイズを指定または調整する動的なパラメータです。

ラージ・プールは、SGAのオプションのコンポーネントです。ラージ・プールを作成する場合は、LARGE_POOL_SIZEパラメータを設定する必要があります。ラージ・プールの構成方法は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

6.4.3.6 Javaプール・サイズの指定

JAVA_POOL_SIZE初期化パラメータは、SGAのJavaプール・コンポーネントのサイズを指定または調整できる動的パラメータです。

Oracle Databaseによって適切なデフォルト値が選択されます。Javaプールの構成方法は、『Oracle Database Java開発者ガイド』を参照してください。

6.4.3.7 Streamsプール・サイズの指定

STREAMS_POOL_SIZE初期化パラメータは、SGAのコンポーネントであるStreamsプールのサイズを指定または調整する動的なパラメータです。

STREAMS_POOL_SIZEが0(ゼロ)に設定されている場合、Oracle Streams製品では、メモリーが必要時にバッファ・キャッシュからStreamsプールに転送されます。詳細は、『Oracle Streamsレプリケーション管理者ガイド』のStreamsプールの説明を参照してください。

6.4.3.8 結果キャッシュの最大サイズの指定

RESULT_CACHE_MAX_SIZE初期化パラメータは、SGAの結果キャッシュ・コンポーネントの最大サイズを指定できるようにする動的なパラメータです。

通常、デフォルトの最大サイズは、SGAが使用可能な合計メモリーと使用中のメモリー管理方式に基づいてデータベースによって選択されるため、このパラメータを指定する必要はありません。現在のデフォルト最大サイズを調べるには、RESULT_CACHE_MAX_SIZEパラメータの値を表示します。この最大サイズを変更するには、ALTER SYSTEM文でRESULT_CACHE_MAX_SIZEを設定するか、テキスト初期化パラメータ・ファイルでこのパラメータを指定します。いずれの場合も、値は近似の32Kの倍数に切り上げられます。

インスタンスの起動時にRESULT_CACHE_MAX_SIZEが0(ゼロ)の場合、結果キャッシュは使用禁止です。使用可能にするには、RESULT_CACHE_MAX_SIZEを0(ゼロ)以外の値に設定して(またはテキスト形式の初期化パラメータ・ファイルからこのパラメータを削除してデフォルトの最大サイズを取得して)、データベースを再起動する必要があります。

結果キャッシュが使用禁止の状態でデータベースを起動した後、ALTER SYSTEM文を使用してRESULT_CACHE_MAX_SIZEを0(ゼロ)以外の値に設定し、その後データベースを再起動していない場合、RESULT_CACHE_MAX_SIZEパラメータの値を問い合せると、結果キャッシュが使用禁止状態のままでも0(ゼロ)以外の値が返されます。したがって、RESULT_CACHE_MAX_SIZEの値は、結果キャッシュが使用可能かどうかを判断する最も信頼できる方法ではありません。かわりに、次の問合せを使用できます。

SELECT dbms_result_cache.status() FROM dual;

DBMS_RESULT_CACHE.STATUS()
---------------------------------------------
ENABLED

結果キャッシュのメモリーは共有プールから取得されるため、結果キャッシュの最大サイズを大きくする場合は、共有プールのサイズを大きくすることも考慮する必要があります。

ビューV$RESULT_CACHE_STATISTICSおよびPL/SQLパッケージのプロシージャDBMS_RESULT_CACHE.MEMORY_REPORTでは、結果キャッシュに現在割り当てられているメモリー量の判断に役立つ情報が表示されます。

PL/SQLパッケージのファンクションDBMS_RESULT_CACHE.FLUSHでは、結果キャッシュがクリアされ、すべてのメモリーが共有プールに解放されます。

関連項目:

  • 結果キャッシュの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

  • DBMS_RESULT_CACHEパッケージのプロシージャとファンクションの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

  • V$RESULT_CACHE_STATISTICSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • クラスタ・データベースのRESULT_CACHE_MAX_SIZEの設定方法は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

6.4.3.9 その他のSGA初期化パラメータの指定

いくつかの追加の初期化パラメータを設定して、SGAのメモリー使用方法を制御できます。

6.4.3.9.1 物理メモリー

LOCK_SGAパラメータをTRUEに設定すると、SGA全体が物理メモリーにロックされます。

このパラメータは自動メモリー管理では使用できません。

6.4.3.9.2 SGA開始アドレス

SHARED_MEMORY_ADDRESSパラメータとHI_SHARED_MEMORY_ADDRESSでは、実行時のSGAの開始アドレスが指定されます。

これらのパラメータはほとんど使用されません。64ビットのプラットフォームの場合、HI_SHARED_MEMORY_ADDRESSでは、64ビット・アドレスの上位32ビットが指定されます。

関連項目:

6.4.3.9.3 拡張バッファ・キャッシュ・メカニズム

USE_INDIRECT_DATA_BUFFERSパラメータは、4GBを超える物理メモリーをサポートする32ビット・プラットフォームで、拡張バッファ・キャッシュ・メカニズムを使用可能にします。この大容量の物理メモリーをサポートしていないプラットフォームでは、このパラメータは無視されます。このパラメータは、自動メモリー管理または自動共有メモリー管理と組み合せて使用することはできません。

関連項目:

6.4.4 自動PGAメモリー管理の使用

デフォルトで、Oracle Databaseでは、インスタンスPGA専用のメモリーの合計量が自動的かつグローバルに管理されます。この量は、初期化パラメータPGA_AGGREGATE_TARGETを設定することによって制御できます。

Oracle Databaseでは、すべてのデータベース・サーバー・プロセスとバックグラウンド・プロセスに割り当てられるPGAメモリーの合計量がこのターゲット値を超えないようにします。

DBCAを使用してデータベースを作成する場合は、合計インスタンスPGAの値を指定できます。その後、DBCAによって、作成されるサーバー・パラメータ・ファイル(SPFILE)に、PGA_AGGREGATE_TARGET初期化パラメータが設定されます。合計インスタンスPGAを指定しない場合は、DBCAによって適切なデフォルト値が選択されます。

CREATE DATABASE SQL文とテキスト形式のパラメータ・ファイルを使用してデータベースを作成する場合は、PGA_AGGREGATE_TARGETの値を指定できます。このパラメータを省略すると、データベースによってデフォルト値が選択されます。

自動PGAメモリー管理を使用すると、SQL作業領域のサイズが自動で設定され、すべての*_AREA_SIZE初期化パラメータが無視されます。特定の時期に、インスタンス上のアクティブな作業領域で使用可能なPGAメモリーの合計量がパラメータPGA_AGGREGATE_TARGETから自動的に導出されます。この量は、PGA_AGGREGATE_TARGETの値から、他の目的で割り当てられたPGAメモリー(例: セッション・メモリー)を減算した値に設定されます。結果のPGAメモリーは、その特定のメモリー要件に基づいて個々のアクティブな作業領域に割り当てられます。

PGAメモリーの使用統計を提供する動的なパフォーマンス・ビューが用意されています。これらの統計のほとんどは、PGA_AGGREGATE_TARGETが設定されると使用可能になります。

  • 作業領域メモリーの割当ておよび使用に関する統計は、次の動的パフォーマンス・ビューで表示できます。

  • V$SYSSTAT
  • V$SESSTAT
  • V$PGASTAT
  • V$SQL_WORKAREA
  • V$SQL_WORKAREA_ACTIVE
  • V$PROCESSビューの次の3つの列では、Oracle Databaseプロセスによって割り当てられ使用されているPGAメモリーがレポートされます。

  • PGA_USED_MEM
  • PGA_ALLOC_MEM
  • PGA_MAX_MEM

PGA_AGGREGATE_TARGET設定がターゲットとなります。したがって、Oracle Databaseでは、PGAのメモリー使用量をこのターゲットに合わせて制限することを試みますが、使用量がこの設定を超える場合があります。PGAメモリー使用量について厳格な制限を指定するには、PGA_AGGREGATE_LIMIT初期化パラメータを使用します。PGAサイズがこの制限を超えないことが、Oracle Databaseによって保証されます。この制限を超えた場合、データベースは最も調整が困難なPGAメモリーを割り当てられているセッションのコールを停止します。PGA_AGGREGATE_LIMITは、自動メモリー管理を使用しているかどうかに関係なく設定できます。PGA_AGGREGATE_LIMITが設定されていない場合、Oracle Databaseによって、適切なデフォルトの制限が決定されます。このパラメータ詳細は、『Oracle Databaseリファレンス』を参照してください。

注意:

自動PGAメモリー管理方法は、専用および共有のサーバー・プロセスによって割り当てられた作業領域に適用されます。専用および共有サーバー・モードでのPGAメモリー割当ての詳細は、『Oracle Database概要』を参照してください。

関連項目:

  • この項で説明されている初期化パラメータおよびビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • この項で説明されているビューの使用の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

6.4.5 手動PGAメモリー管理の使用

Oracle Databaseでは、SQL作業領域を手動でチューニングする手動PGAメモリー管理がサポートされています。

Oracle Database 10gより前のリリースでは、データベース管理者がパラメータSORT_AREA_SIZEHASH_AREA_SIZEBITMAP_MERGE_AREA_SIZEおよびCREATE_BITMAP_AREA_SIZEを設定することで、SQL作業領域の最大サイズを制御していました。しかし、最大作業領域サイズは、データ入力サイズとシステム内でアクティブな作業領域の合計数から選択するのが理想であるため、これらのパラメータの設定は困難です。これら2つの要因は、作業領域および時間により大幅に変動します。このため、各種*_AREA_SIZEパラメータを最適な状況でチューニングすることは困難です。

このような理由から、自動PGAメモリー管理を使用可能にしておくことをお薦めします。

SQL作業領域を手動でチューニングする場合は、WORKAREA_SIZE_POLICY初期化パラメータをMANUALに設定する必要があります。

注意:

初期化パラメータWORKAREA_SIZE_POLICYは、セッション・レベルおよびシステム・レベルのパラメータで、設定できる値はMANUALまたはAUTOの2つのみです。デフォルトはAUTOです。PGA_AGGREGATE_TARGETを設定した後、メモリー管理モードを自動と手動の間で切り替えることができます。WORKAREA_SIZE_POLICYAUTOに設定されている場合、*_AREA_SIZEパラメータの設定は無視されます。

6.5 強制フル・データベース・キャッシュ・モードの使用方法

Oracle Databaseインスタンスは、バッファ・キャッシュに全データベースをキャッシュできます。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

6.5.1 強制フル・データベース・キャッシュ・モードの概要

デフォルト・キャッシュ・モードでは、ユーザーが大規模表を問い合せた場合、キャッシュすることでバッファ・キャッシュからより有用なデータが削除される可能性があるため、Oracle Databaseは基礎となるデータを必ずしもキャッシュしません。Oracle Database 12cリリース1 (12.1.0.2)以上では、データベース全体をバッファ・キャッシュにキャッシュするのに十分な領域があり、そうすることが有益であるとOracle Databaseインスタンスが判断した場合、インスタンスはデータベース全体をバッファ・キャッシュに自動的にキャッシュします。

データベース全体をバッファ・キャッシュにキャッシュすると、パフォーマンスが改善されることがあります。ALTER DATABASE FORCE FULL DATABASE CACHING文を使用すると、強制的にインスタンスでデータベースをバッファ・キャッシュにキャッシュさせることができます。この文は、インスタンスを強制フル・データベース・キャッシュ・モードにします。このモードでは、Oracle Databaseにより、バッファ・キャッシュはデータベース全体のキャッシュに十分な大きさであるとみなされ、それ以降にアクセスされるすべてのブロックのキャッシュが試行されます。

Oracle Databaseインスタンスが強制フル・データベース・キャッシュ・モードである場合、次の問合せではYESが返されます。

SELECT FORCE_FULL_DB_CACHING FROM V$DATABASE;

インスタンスがデフォルト・キャッシュ・モードである場合、NOCACHE LOBはバッファ・キャッシュにキャッシュされません。しかし、インスタンスが強制フル・データベース・キャッシュ・モードである場合、NOCACHE LOBはバッファ・キャッシュにキャッシュできます。また、SecureFiles LOB記憶域を使用するLOBとBasicFiles LOB記憶域を使用するLOBはいずれも、強制フル・データベース・キャッシュ・モードでのみバッファ・キャッシュにキャッシュできます。

注意:

  • インスタンスが強制フル・データベース・キャッシュ・モードになると、データベース・オブジェクトはバッファ・キャッシュにすぐにロードされません。かわりに、アクセス時に、バッファ・キャッシュにキャッシュされます。

  • マルチテナント環境では、強制フル・データベース・キャッシュ・モードは、プラガブル・データベース(PDB)全部を含め、マルチテナント・コンテナ・データベース(CDB)全体に適用されます。

  • 強制フル・データベース・キャッシュ・モードに関する情報は、制御ファイルに格納されます。制御ファイルを置換または再作成すると、強制フル・データベース・キャッシュ・モードに関する情報は失われます。復元された制御ファイルにこの情報が含まれるかどうかは、制御ファイルをバックアップした時期によって決まります。

関連項目:

6.5.2 強制フル・データベース・キャッシュ・モードを有効にする前に

データベース・インスタンスに対して強制フル・データベース・キャッシュ・モードを有効にするには、データベースは12.0.0以上の互換性レベルである必要があります。また、バッファ・キャッシュは必ずデータベース全体をキャッシュするのに十分な大きさにします。

自動メモリー管理にSGA_TARGETまたはMEMORY_TARGET初期化パラメータを使用するようにデータベースを構成する場合、バッファ・キャッシュのサイズはワークロードによって変わります。インスタンスが通常のワークロード下にあるときに、次の問合せを実行してバッファ・キャッシュ・サイズを見積ります。

SELECT NAME, BYTES FROM V$SGAINFO WHERE NAME='Buffer Cache Size';

この問合せは、あらゆる使用可能なブロック・サイズについてバッファ・キャッシュ・サイズを返します。データベースで複数のブロック・サイズを使用している場合、使用可能な各ブロック・サイズのバッファ・キャッシュ・サイズはそのブロック・サイズの合計データベース・サイズより大きくなるようにするのが最適です。

DB_nK_CACHE_SIZE初期化パラメータを指定すると、デフォルト以外のブロック・サイズのバッファ・キャッシュ・サイズを確認できます。SGA_TARGETまたはMEMORY_TARGETでは、ワークロードに応じてデフォルト・プールのデフォルト・ブロック・サイズのバッファ・キャッシュ・サイズが変更される場合があります。次の問合せは、デフォルト・プールのデフォルト・ブロック・サイズについて現在のバッファ・キャッシュ・サイズを返します。

SELECT COMPONENT, CURRENT_SIZE FROM V$SGA_DYNAMIC_COMPONENTS 
   WHERE COMPONENT LIKE 'DEFAULT buffer cache';

データベース全体をバッファ・キャッシュで実行するためのメモリー要件を見積っている場合、バッファ・キャッシュのサイズを次のいずれかとして見積ることができます。

  • SGA_TARGETを使用する予定の場合、バッファ・キャッシュ・サイズはSGA_TARGETの60%と見積ることができます。

  • MEMORY_TARGETを使用する予定の場合、SGAサイズはMEMORY_TARGETの60%、バッファ・キャッシュ・サイズはSGAサイズの60%と見積ることができます。つまり、バッファ・キャッシュ・サイズはMEMORY_TARGETの36%と見積ることができます。

6.5.3 強制フル・データベース・キャッシュ・モードの有効化

データベースの強制フル・データベース・キャッシュ・モードを有効にすることができます。

  1. ALTER DATABASEシステム権限を持つユーザーとしてインスタンスに接続します。
  2. データベースはマウントされ、オープンされていないことを確認します。
  3. 次のSQL文を発行します。
    ALTER DATABASE FORCE FULL DATABASE CACHING;
    
  4. (オプション)データベースをオープンします。
    ALTER DATABASE OPEN;

6.5.4 強制フル・データベース・キャッシュ・モードの無効化

データベースの強制フル・データベース・キャッシュ・モードを無効にすることができます。

  1. ALTER DATABASEシステム権限を持つユーザーとしてインスタンスに接続します。
  2. データベースはマウントされ、オープンされていないことを確認します。
  3. 次のSQL文を発行します。
    ALTER DATABASE NO FORCE FULL DATABASE CACHING;
    
  4. (オプション)データベースをオープンします。
    ALTER DATABASE OPEN;

6.6 Database Smart Flash Cacheの構成

データベース・スマート・フラッシュ・キャッシュ機能は、ソリッド・ステート・デバイス(SSD)テクノロジを使用してデータベース・バッファ・キャッシュを透過的に拡張します。Database Smart Flash Cacheにより、ディスクI/O量が削除され、同等サイズのRAMを追加するより低いコストでOracleデータベースのパフォーマンスを大幅に向上させることができます。

関連項目:

データベース・スマート・フラッシュ・キャッシュについては「メモリー・アーキテクチャの概要」

6.6.1 Database Smart Flash Cacheを構成する場合

いくつかの条件が満たされた場合は、データベース・スマート・フラッシュ・キャッシュの構成を検討する必要があります。

次のすべての条件が該当する場合は、データベース・スマート・フラッシュ・キャッシュの追加を検討してください。

  • データベースがSolarisまたはOracle Linuxオペレーティング・システムで実行されています。Database Smart Flash Cacheは、これらのオペレーティング・システムでのみサポートされます。

  • 自動ワークロード・リポジトリ(AWR)レポートまたはSTATSPACKレポートのバッファ・プール・アドバイザセクションには、バッファ・キャッシュのサイズを2倍にすると効果的であることが示されています。

  • db file sequential readは上位待機イベントです。

  • 手元に予備のCPUがあります。

注意:

複数のインスタンス間で1つのフラッシュ・ファイルを共有することはできません。ただし、論理ボリューム・マネージャまたは同様のツールを使用してフラッシュ・デバイスを静的にパーティション化している場合、複数のインスタンス間で1つのフラッシュ・デバイスを共有できます。

6.6.2 Database Smart Flash Cacheのサイズの設定

一般的に、Database Smart Flash Cacheのサイズはバッファ・キャッシュのサイズの2から10倍に設定します。

乗数を2未満にすると、効果がありません。自動共有メモリー管理を使用している場合は、Database Smart Flash CacheをSGA_TARGETのサイズの2倍から10倍にします。この計算に使用するSGA_TARGETのサイズは、フル・サイズではなく、その80%でも十分です。

6.6.3 Database Smart Flash Cacheのメモリーのチューニング

バッファ・キャッシュからDatabase Smart Flash Cacheにデータベース・ブロックを移動するたびに、そのブロックに関する少量のメタデータがバッファ・キャッシュに保持されます。

単一インスタンス・データベースの場合、このメタデータによって、約100バイトが消費されます。Oracle Real Application Clusters(Oracle RAC)データベースの場合は、約200バイト消費されます。このため、Database Smart Flash Cacheを追加するときには、この余分なメモリー要件を考慮する必要があります。

データベース・スマート・フラッシュ・キャッシュのためにメモリーをチューニングするには、次のいずれかのアクションを完了します。

  • 手動でメモリーを管理している場合は、構成されているデータベース・スマート・フラッシュ・キャッシュに収まるデータベース・ブロックの数に100 (Oracle RACの場合は200)を乗じた値とほぼ等しくなるまでバッファ・キャッシュのサイズを増やしてください。

  • 自動メモリー管理を使用している場合は、前述のアルゴリズムを使用して、MEMORY_TARGETのサイズを増やしてください。先にMEMORY_MAX_TARGETのサイズを増やすことが必要になる場合があります。

  • 自動共有メモリー管理を使用している場合は、SGA_TARGETのサイズを増やしてください。

また、フラッシュ・キャッシュを使用するOracle RACデータベースでは、グローバル・キャッシュ・サービス(GCS)リソース用に共有プールに追加メモリーを割り当てる必要があります。各GCSリソースは、共有プールに約208バイト必要です。

注意:

バッファ・キャッシュ・サイズを増やさなくても、Database Smart Flash Cacheを追加できます。この場合、バッファ・キャッシュの有効サイズが減少します。場合によっては、この損失分はサイズの大きいDatabase Smart Flash Cacheを使用することによって相殺できます。

6.6.4 Database Smart Flash Cacheの初期化パラメータ

データベース・スマート・フラッシュ・キャッシュを構成するために、初期化パラメータのセットを使用できます。

表6-4 Database Smart Flash Cacheの初期化パラメータ

パラメータ 説明

DB_FLASH_CACHE_FILE

Database Smart Flash Cacheが含まれるファイルのパスおよびファイル名のリストを、オペレーティング・システムのファイル・システムまたはOracle Automatic Storage Managementディスク・グループ内で指定します。指定されたファイルが存在しない場合は、起動時にデータベースによって作成されます。各ファイルはフラッシュ・デバイスに常駐する必要があります。Database Smart Flash Cacheをディスク・ドライブ(スピンドル)に構成すると、パフォーマンスが低下する可能性があります。最大で16個のファイルがサポートされます。

DB_FLASH_CACHE_SIZE

Database Smart Flash Cache内の各ファイルのサイズを指定します。各サイズは、DB_FLASH_CACHE_FILEで指定されたファイルに対応しています。ファイルおよびサイズは、指定された順序で対応しています。指定されたサイズの数が指定されたファイルの数に一致しない場合は、エラーが発生します。

サイズ指定は、そのフラッシュ・デバイスの物理メモリー・サイズ以下である必要があります。サイズは、nGというように、ギガバイト(GB)数で示します。たとえば、16GBのDatabase Smart Flash Cacheを指定するには、DB_FLASH_CACHE_SIZE値を16Gに設定します。

たとえば、Database Smart Flash Cacheで次のフラッシュ・デバイスが使用されていると想定します。

ファイル サイズ

/dev/sda

32G

/dev/sdb

32G

/dev/sdc

64G

初期化パラメータを次の値に設定できます。

DB_FLASH_CACHE_FILE = /dev/sda, /dev/sdb, /dev/sdc

DB_FLASH_CACHE_SIZE = 32G, 32G, 64G

V$FLASHFILESTATビューを問い合せて、各ファイルの累積待機時間および読取り数を確認し、平均待機時間を計算できます。

ALTER SYSTEMを使用して、使用禁止にするフラッシュ・デバイスごとにDB_FLASH_CACHE_SIZEをゼロに設定できます。また、ALTER SYSTEMを使用して、使用禁止にした任意のフラッシュ・デバイスのサイズを元のサイズに戻し、再び使用可能にすることもできます。ただし、Database Smart Flash Cacheのサイズを動的に変更することはできません。

関連項目:

この項で説明している初期化パラメータの詳細およびV$FLASHFILESTATビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

6.6.5 Oracle Real Application Clusters環境のDatabase Smart Flash Cache

Oracle Real Application Clusters環境では、すべてのインスタンスについてDatabase Smart Flash Cacheを構成するか、または一切構成しないことをお薦めします。また、各インスタンスに構成されたフラッシュ・キャッシュの合計サイズはだいたい同じである必要があります。

6.7 インメモリー列ストアの使用方法

インメモリー列ストア(IM列ストア)は、システム・グローバル領域(SGA)のオプション部分で、表、表パーティション、その他のデータベース・オブジェクトのコピーが格納されます。IM列ストアでは、データがSGAの他の部分にあるため、行ではなく列ごとに移入され、高速スキャン用に最適化されます。IM列ストアは、Oracle Database In-Memoryオプションを使用して組み込まれます。

注意:

この機能は、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

関連項目:

『Oracle Database概要』

6.7.1 IM列ストアについて

IM列ストアでは、様々な圧縮方法およびデータベース移入オプションから選択できます。

6.7.1.1 IM列ストアの概要

IM列ストアは、SGA内の新しい静的プールです。IM列ストア内のデータは、従来の行形式ではなく、列形式で存在します。各列は、別個の構造として格納されます。IM列ストアは、バッファ・キャッシュに代わるものではなく、補完するものとして機能するため、データは行形式と列形式の両方でメモリーに格納できます。

IM列ストアを有効にするには、INMEMORY_SIZE初期化パラメータをゼロ以外の値に設定する必要があります。

IM列ストアは、次のレベルのいずれかで有効にできます。

  • マテリアライズド・ビュー

  • 表領域

  • パーティション

表領域レベルで有効にすると、表領域内の表およびマテリアライズド・ビューはすべて、デフォルトでIM列ストアに対して有効になります。データベース・オブジェクトの列はすべてIM列ストアまたはデータベース・オブジェクトの列のサブセットに移入できます。同様に、パーティション化された表またはマテリアライズド・ビューの場合、パーティションはすべてIM列ストアまたはパーティションのサブセットに移入できます。

IM列ストアにデータベース・オブジェクトを格納すると、データベース・オブジェクトに対して実行される次のタイプの操作の場合、パフォーマンスが大幅に向上することがあります。

  • 大量の行をスキャンし、演算子(=<>INなど)を使用するフィルタを適用する問合せ

  • 100列ある表から5列を選択する問合せなど、列が大量にある表またはマテリアライズド・ビューから列を少し選択する問合せ

  • 小規模表を大規模表に結合する問合せ

  • データを集計する問合せ

通常、分析およびレポート作成の問合せのパフォーマンスを向上させるために、複数列索引が作成されます。このような索引は、データ操作言語(DML)文のパフォーマンスを低下させる可能性があります。IM列ストアにデータベース・オブジェクトを移入すると、問合せのパフォーマンスに影響を及ぼすことなく、分析およびレポート作成の問合せに使用される索引を削減または消去できます。このような索引を消去すると、トランザクションおよびデータ・ロード操作のパフォーマンスを向上させることができます。

IM列ストアに対してデータベース・オブジェクトを有効にするには、次のSQL文にINMEMORY句を指定します。

  • CREATE TABLE

  • ALTER TABLE

  • CREATE TABLESPACE

  • ALTER TABLESPACE

  • CREATE MATERIALIZED VIEW

  • ALTER MATERIALIZED VIEW

IM列ストアに現在移入されているデータベース・オブジェクトを確認するには、V$IM_SEGMENTSビューに対して次の問合せを実行します。

SELECT OWNER, SEGMENT_NAME, INMEMORY_PRIORITY, INMEMORY_COMPRESSION 
   FROM V$IM_SEGMENTS;

注意:

IM列ストアに対して有効になっているデータベース・オブジェクトがIM列ストアに移入されないことがあります。したがって、そのようなデータベース・オブジェクトがこの問合せの結果に表示されないことがあります。ただし、データベース・オブジェクトがIM列ストアに移入される可能性を高めるために、優先度レベルを上げることができます。「IM列ストアのデータ移入オプション」を参照してください。DBA_TABLESビューなどの他のビューには、IM列ストアの候補が表示されます。

次のタイプの操作の場合、IM列ストアによってパフォーマンスは向上しません。

  • 述語が複雑な問合せ

  • 列を大量に選択する問合せ

  • 行を大量に返す問合せ

  • 複数の大規模表を結合する問合せ

また、データベース・オブジェクトがSYSユーザーに所有され、SYSTEMまたはSYSAUX表領域に格納されている場合、そのデータベース・オブジェクトはIM列ストアに移入できません。

関連項目:

6.7.1.2 IM列ストアの圧縮方法

IM列ストアでは、データを圧縮でき、圧縮されたデータに対してSQL問合せを直接実行できます。

表6-5に、IM列ストアでサポートされているデータ圧縮方法をまとめます。

表6-5 IM列ストアの圧縮方法

CREATE/ALTERの構文 説明

NO MEMCOMPRESS

データは圧縮されません。

MEMCOMPRESS FOR DML

この方法は、DML操作用にデータを最適化し、IM列ストア・データを最も小さく圧縮します。(NO MEMCOMPRESSを除く)。

MEMCOMPRESS FOR QUERY LOW

この方法は、問合せパフォーマンスが最適になります。

IM列ストア・データの圧縮は、MEMCOMPRESS FOR DMLを上回りますが、MEMCOMPRESS FOR QUERY HIGHを下回ります。

この方法は、CREATEまたはALTER SQL文に圧縮方法を指定せずにINMEMORY句が指定されている場合またはLOWまたはHIGHのいずれかを指定せずにMEMCOMPRESS FOR QUERYが指定されている場合のデフォルトです。

MEMCOMPRESS FOR QUERY HIGH

この方法は、問合せパフォーマンスが非常によくなります。

IM列ストアデータの圧縮は、MEMCOMPRESS FOR QUERY LOWを上回りますが、MEMCOMPRESS FOR CAPACITY LOWを下回ります。

MEMCOMPRESS FOR CAPACITY LOW

この方法は、問合せパフォーマンスがよくなります。

IM列ストア・データの圧縮は、MEMCOMPRESS FOR QUERY HIGHを上回りますが、MEMCOMPRESS FOR CAPACITY HIGHを下回ります。

この方法は、LOWまたはHIGHのいずれかを指定せずにMEMCOMPRESS FOR CAPACITYが指定されている場合のデフォルトです。

MEMCOMPRESS FOR CAPACITY HIGH

この方法は、問合せパフォーマンスがある程度よくなります。

IM列ストア・データを最も大きく圧縮します。

SQL文では、MEMCOMPRESSキーワードの前にINMEMORYキーワードがある必要があります。

6.7.1.3 IM列ストアのデータ移入オプション

IM列ストアに対してデータベース・オブジェクトを有効にすると、データベース・オブジェクトのデータをIM列ストア(デフォルト)に移入するタイミングをOracle Databaseで制御することも、移入キューでのデータベース・オブジェクトの優先度を決定する優先度レベルを指定することもできます。

Oracle SQLには、移入のためにキューを細かく制御できるようにするINMEMORY PRIORITY副句が組み込まれています。たとえば、あるデータベース・オブジェクトのデータを移入してから他のデータベース・オブジェクトのデータを移入することが、重要になったり重要でなくなったりすることがあります。

表6-6に、サポートされている優先度レベルを示します。

表6-6 IM列ストアにデータベース・オブジェクトを移入するための優先度レベル

CREATE/ALTERの構文 説明

PRIORITY NONE

Oracle Databaseがデータベース・オブジェクトのデータをIM列ストアに移入するタイミングを制御します。データベース・オブジェクトのスキャンによってIM列ストアへのオブジェクトの移入がトリガーされます。

これは、PRIORITYINMEMORY句に指定されていない場合のデフォルト・レベルです。

PRIORITY LOW

データベース・オブジェクトのデータは、優先度レベルがNONEのデータベース・オブジェクトより前に、IM列ストアに移入されます。

データベース・オブジェクトのデータは、優先度レベルがMEDIUMHIGHまたはCRITICALのデータベース・オブジェクトより後に、IM列ストアに移入されます。

PRIORITY MEDIUM

データベース・オブジェクトのデータは、優先度レベルがNONEまたはLOWのデータベース・オブジェクトより前に、IM列ストアに移入されます。

データベース・オブジェクトのデータは、優先度レベルがHIGHまたはCRITICALのデータベース・オブジェクトより後に、IM列ストアに移入されます。

PRIORITY HIGH

データベース・オブジェクトのデータは、優先度レベルがNONELOWまたはMEDIUMのデータベース・オブジェクトより前に、IM列ストアに移入されます。

データベース・オブジェクトのデータは、優先度レベルがCRITICALのデータベース・オブジェクトより後に、IM列ストアに移入されます。

PRIORITY CRITICAL

データベース・オブジェクトのデータは、優先度レベルがNONELOWMEDIUMまたはHIGHのデータベース・オブジェクトより前に、IM列ストアに移入されます。

複数のデータベース・オブジェクトの優先度レベルがNONE以外である場合、Oracle Databaseでは、優先度レベルに基づいてIM列ストアに移入するデータベース・オブジェクトのデータをすべてキューに入れます。CRITICAL優先度レベルのデータベース・オブジェクトのデータが最初に移入され、HIGH優先度レベルのデータベース・オブジェクトのデータが次に移入される、といったようになります。IM列ストアに領域が残っていない場合、十分な領域が使用できるようになるまで、他のオブジェクトは移入されません。

データベースを再起動すると、優先度レベルがNONE以外のデータベース・オブジェクトのデータはすべて起動時にIM列ストアに移入されます。優先度レベルがNONE以外のデータベース・オブジェクトの場合、そのデータベース・オブジェクトが含指定されているALTER TABLEまたはALTER MATERIALIZED VIEW DDL文は、IM列ストアでDDLの変更が記録されるまで戻りません。

注意:

  • 優先度レベル設定は、表全体または表パーティションに適用する必要があります。表の列のサブセットごとに異なるIM列ストアの優先度レベルを指定することはできません。

  • ディスク上のセグメントが64KB以下の場合、IM列ストアに移入されません。したがって、IM列ストアに対して有効になっている小規模データベース・オブジェクトによって、IM列ストアに移入されないことがあります。

6.7.2 IM列ストアに関連する初期化パラメータ

IM列ストアに関連する初期化パラメータのセットがあります。

表6-7 IM列ストアに関連する初期化パラメータ

初期化パラメータ 説明

INMEMORY_SIZE

この初期化パラメータは、データベース・インスタンスでのIM列ストアのサイズを設定します。

デフォルト値は0 (ゼロ)で、IM列ストアを使用しないことを意味します。IM列ストアを有効にするには、この初期化パラメータをゼロ以外の値に設定する必要があります。パラメータをゼロ以外の値に設定する場合、最小設定は100Mです。

マルチテナント環境では、ルートでのこのパラメータの設定は、マルチテナント・コンテナ・データベース(CDB)全体の設定となります。また、このパラメータは、プラガブル・データベース(PDB)ごとにIM列ストアの最大サイズを制限するように、各PDBで設定することもできます。PDB値の合計は、CDB値より小さても、CDB値と等しくても、CDB値より大きくてもかまいません。ただし、CDB値は、ルートおよびすべてのPDBを含め、CDB全体のIM列ストアで使用できる最大メモリー量です。このパラメータがPDBに対して特に設定されていない場合、PDBはCDB値を継承します。つまり、PDBはCDBで使用できるIM列ストアすべてを使用できます。

INMEMORY_FORCE

この初期化パラメータを使用すると、IM列ストアに対して表およびマテリアライズド・ビューを有効にしたり、IM列ストアに対してすべての表およびマテリアライズド・ビューを無効にできます。

個々のデータベース・オブジェクトのINMEMORY属性またはNO INMEMORY属性によってIM列ストアに移入されるかどうかを決定できるようにする場合は、このパラメータをDEFAULT (デフォルト値)に設定します。

すべての表およびマテリアライズド・ビューをIM列ストアに対して無効にすることを指定する場合は、このパラメータをOFFに設定します。

INMEMORY_CLAUSE_DEFAULT

この初期化パラメータを使用すると、新しい表およびマテリアライズド・ビューに対してデフォルトのIM列ストア句を指定できます。

新しい表およびマテリアライズド・ビューに対してデフォルトのIM列ストア句がないことを指定する場合は、このパラメータを未設定のままにするか、空の文字列に設定します。このパラメータの値をNO INMEMORYに設定すると、デフォルト値(空の文字列)に設定したのと同じ結果となります。

すべての新しい表およびマテリアライズド・ビューに対して句がデフォルトであることを指定する場合は、このパラメータを有効なINMEMORY句に設定します。句には、IM列ストアの圧縮方法およびデータ移入オプションに関する有効な句を含めることができます。

句がINMEMORYで始まる場合、INMEMORY句が指定されていないものも含め、すべての新しい表およびマテリアライズド・ビューがIM列ストアに移入されます。句からINMEMORYが省略されている場合、作成時にINMEMORY句を指定してIM列ストアに対して有効になっている新しい表およびマテリアライズド・ビューにのみ適用されます。

INMEMORY_QUERY

この初期化パラメータは、インメモリー問合せを使用できるかどうかを指定します。問合せでIM列ストアに移入されるデータベース・オブジェクトにアクセスできるようにする場合は、このパラメータをENABLE (デフォルト値)に設定します。あるいは、IM列ストアに移入されたデータベース・オブジェクトにアクセスできないようにする場合は、このパラメータをDISABLEに設定します。

INMEMORY_MAX_POPULATE_SERVERS

この初期化パラメータは、このようなサーバーが残りのシステムに過負荷をかけないように、IM列ストア移入に使用するバックグラウンド移入サーバーの最大数を指定します。システムのコア数に基づいて、このパラメータを適切な値に設定します。

INMEMORY_MAX_POPULATE_SERVERS0に設定されている場合、IM列ストアにオブジェクトを移入できません。

INMEMORY_TRICKLE_REPOPULATE_SERVERS_PERCENT

この初期化パラメータは、トリクル再移入が移入サーバーのごく一部のみを使用するように設計されているため、IM列ストア再移入に使用するバックグラウンド移入サーバーの最大数を制限します。このパラメータの値は、INMEMORY_MAX_POPULATE_SERVERS初期化パラメータ値に占める割合です。たとえば、このパラメータを10に設定し、INMEMORY_MAX_POPULATE_SERVERS10に設定した場合、平均で1コアがトリクル再移入に使用されます。

OPTIMIZER_INMEMORY_AWARE

この初期化パラメータは、インメモリーに対してすべてのオプティマイザ・コスト・モデル拡張機能を有効または無効にします。パラメータをFALSEに設定すると、SQL文の最適化の際に、オプティマイザは表のインメモリー・プロパティを無視するようになります。

6.7.3 データベースに対するIM列ストアの有効化

表、表領域またはマテリアライズド・ビューをIM列ストアに対して有効にするには、データベースに対してIM列ストアを有効にする必要があります。

データベースに対してIM列ストアを有効にするには、次の手順を実行します。

  1. データベースの互換性レベルが12.1.0以上のであることを確認します。
  2. INMEMORY_SIZE初期化パラメータをゼロ以外の値に設定します。

    ALTER SYSTEM文を使用してサーバー・パラメータ・ファイル(SPFILE)でこのパラメータを設定する場合、SCOPE=SPFILEを指定する必要があります。

    最小設定は、100Mです。

  3. データベースを再起動します。

    データベースを再起動してSGAのIM列ストアを初期化する必要があります。

  4. 必要に応じて、SQL*Plusで次のように入力すると、IM列ストアに現在割り当てられているメモリー量を確認できます。
    SHOW PARAMETER INMEMORY_SIZE
    

関連項目:

  • データベースの互換性レベルの設定の詳細は、『Oracle Databaseアップグレード・ガイド』を参照してください。

  • 「初期化パラメータの指定」

  • INMEMORY_SIZE初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • 起動と停止

6.7.4 IM列ストアに対する表の有効化および無効化

IM列ストアに対して表を有効にするには、CREATE TABLEまたはALTER TABLE文にINMEMORY句を指定します。IM列ストアに対して表を無効にするには、CREATE TABLEまたはALTER TABLE文にNO INMEMORY句を指定します。

IM列ストアに対して表を有効または無効にするには、次の手順を実行します。

  1. IM列ストアがデータベースに対して有効になっていることを確認します。
  2. 表を作成または変更するために適切な権限を持つユーザーとして、データベース・インスタンスに接続します。
  3. INMEMORY句またはNO INMEMORY句を指定して、CREATE TABLEまたはALTER TABLE文を実行します。

    関連項目:

    • 表の作成および変更の詳細は、「表の管理」を参照してください

    • CREATE TABLEまたはALTER TABLE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

6.7.4.1 表に対するIM列ストアの有効化および無効化の例

例では、IM列ストアに対して表を有効化または無効化する方法を示しています。

例6-2 表の作成とIM列ストアに対する有効化

次の例では、test_inmem表を作成し、IM列ストアに対して有効にします。

Live SQL:

「Oracle Live SQL: インメモリー列ストアに対する表の有効化および無効化」でOracle Live SQLに関連する例を参照および実行します。

CREATE TABLE test_inmem (
     id        NUMBER(5) PRIMARY KEY,
     test_col  VARCHAR2(15))
  INMEMORY;

この例では、INMEMORY句にデフォルトを使用しています。したがって、MEMCOMPRESS FOR QUERYおよびPRIORITY NONEが使用されます。

例6-3 IM列ストアに対する表の有効化

次の例では、IM列ストアに対してoe.product_information表を有効にします。

ALTER TABLE oe.product_information INMEMORY;

この例では、INMEMORY句にデフォルトを使用しています。したがって、MEMCOMPRESS FOR QUERYおよびPRIORITY NONEが使用されます。

例6-4 FOR CAPACITY LOW圧縮を指定したIM列ストアに対する表の有効化

次の例では、IM列ストアに対してoe.product_information表を有効にし、圧縮方法FOR CAPACITY LOWを指定します。

ALTER TABLE oe.product_information INMEMORY MEMCOMPRESS FOR CAPACITY LOW;

この例では、PRIORITY句にデフォルトを使用しています。したがって、PRIORITY NONEが使用されます。

例6-5 HIGHデータ移入優先度を指定したIM列ストアに対する表の有効化

次の例では、IM列ストアに対してoe.product_information表を有効にし、表データをメモリーに移入するためにPRIORITY HIGHを指定します。

ALTER TABLE oe.product_information INMEMORY PRIORITY HIGH;

この例では、MEMCOMPRESS句にデフォルトを使用しています。したがって、MEMCOMPRESS FOR QUERYが使用されます。

例6-6 FOR CAPACITY HIGH圧縮およびLOWデータ移入優先度を指定したIM列ストアに対する表の有効化

次の例では、IM列ストアに対してoe.product_information表を有効にし、表データをメモリーに移入するためにFOR CAPACITY HIGH表圧縮およびPRIORITY LOWを指定します。

ALTER TABLE oe.product_information INMEMORY 
  MEMCOMPRESS FOR CAPACITY HIGH 
  PRIORITY LOW;

例6-7 IM列ストアに対する表の列の有効化

この例では、IM列ストアに対してoe.product_information表の一部の列を有効にしますが、その他の列は有効にしません。また、IM列ストアに対して有効な列に、別のIM列ストアの圧縮方法を指定します。

ALTER TABLE oe.product_information  
   INMEMORY MEMCOMPRESS FOR QUERY (
      product_id, product_name, category_id, supplier_id, min_price)
   INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (
      product_description, warranty_period, product_status, list_price)
   NO INMEMORY (
      weight_class, catalog_url);

この例では、具体的に次のように指定しています。

  • product_idで始まり、min_priceで終わる列のリストは、MEMCOMPRESS FOR QUERY圧縮方法でIM列ストアに対して有効になります。

  • product_descriptionで始まり、list_priceで終わる列のリストは、MEMCOMPRESS FOR CAPACITY HIGH圧縮方法でIM列ストアに対して有効になります。

  • weight_class列およびcatalog_url列は、IM列ストアに対して有効になりません。

この例では、PRIORITY句にデフォルトを使用しています。したがって、PRIORITY NONEが使用されます。

V$IM_COLUMN_LEVELビューを問い合せると、データベース・オブジェクトに定義されている選択した列の圧縮レベルを確認できます。

優先度レベル設定は、表全体または表パーティションに適用する必要があります。表の列のサブセットごとに異なるIM列ストアの優先度レベルを指定することはできません。

V$IM_COLUMN_LEVELビューの詳細は、『Oracle Databaseリファレンス』を参照

例6-8 IM列ストアに対する表の無効化

IM列ストアに対して表を無効にするには、NO INMEMORY句を使用します。次の例では、IM列ストアに対してoe.product_information表を無効にします。

ALTER TABLE oe.product_information NO INMEMORY;

V$IM_SEGMENTSビューを問い合せると、IM列ストアに移入されているデータベース・オブジェクトをリストできます。問合せの例は、「IM列ストアの概要」を参照してください。

6.7.5 IM列ストアに対する表領域の有効化および無効化

IM列ストアに対して表領域を有効または無効にすることができます。

INMEMORY句を指定したCREATE TABLESPACE文を使用して表領域を作成する際に、IM列ストアに対して表領域を有効にできます。また、INMEMORY句を指定したALTER TABLESPACE文を使用して、IM列ストアに対して有効になるように表領域を変更できます。

IM列ストアに対して表領域を無効にするには、CREATE TABLESPACEまたはALTER TABLESPACE文にNO INMEMORY句を指定します。

IM列ストアに対して表領域が有効になっている場合、表領域内の表およびマテリアライズド・ビューはすべて、デフォルトでIM列ストアに対して有効になります。INMEMORY句は、表、マテリアライズド・ビューおよび表領域の場合と同じです。DEFAULT記憶域句は、IM列ストアに対して表領域を有効にする場合はINMEMORY句の前に、IM列ストアに対して表領域を無効にする場合はNO INMEMORY句の前に必要です。

IM列ストアに対して表領域が有効になっている場合、表領域内の個々の表およびマテリアライズド・ビューに異なるインメモリー設定を指定でき、個々のデータベース・オブジェクトの設定は表領域の設定を上書きします。たとえば、メモリーにデータを移入するために表領域がPRIORITY LOWに設定されているのに対し、表領域内の表がPRIORITY HIGHに設定されている場合、その表ではPRIORITY HIGHを使用します。

IM列ストアに対して表領域を有効または無効にするには、次の手順を実行します。

  1. IM列ストアがデータベースに対して有効になっていることを確認します。
  2. 表領域を作成または変更するために適切な権限を持つユーザーとして、データベース・インスタンスに接続します。
  3. INMEMORY句またはNO INMEMORY句を指定して、CREATE TABLESPACEまたはALTER TABLESPACE文を実行します。

例6-9 表領域の作成とIM列ストアに対する有効化

次の例では、tbs1表領域を作成し、IM列ストアに対して有効にします。

CREATE TABLESPACE tbs1 
   DATAFILE 'tbs1.dbf' SIZE 40M 
   ONLINE
   DEFAULT INMEMORY;

例6-10 表領域の変更とIM列ストアに対する有効化

次の例では、IM列ストアに対して有効になるようにtbs1表領域を変更し、表領域内のデータベース・オブジェクトに対してFOR CAPACITY HIGH圧縮を指定し、メモリーにデータを移入するためにPRIORITY LOWを指定します。

ALTER TABLESPACE tbs1 DEFAULT INMEMORY 
   MEMCOMPRESS FOR CAPACITY HIGH 
   PRIORITY LOW;

この例では、INMEMORY句にデフォルトを使用しています。したがって、MEMCOMPRESS FOR QUERYおよびPRIORITY NONEが使用されます。

6.7.6 IM列ストアに対するマテリアライズド・ビューの有効化および無効化

IM列ストアに対してマテリアライズド・ビューを有効および無効にすることができます。

IM列ストアに対してマテリアライズド・ビューを有効にするには、CREATE MATERIALIZED VIEWまたはALTER MATERIALIZED VIEW文にINMEMORY句を指定します。IM列ストアに対してマテリアライズド・ビューを無効にするには、CREATE MATERIALIZED VIEWまたはALTER MATERIALIZED VIEW文にNO INMEMORY句を指定します。

IM列ストアに対してマテリアライズド・ビューを有効または無効にするには、次の手順を実行します。

  1. IM列ストアがデータベースに対して有効になっていることを確認します。
  2. マテリアライズド・ビューを作成または変更するために適切な権限を持つユーザーとして、データベース・インスタンスに接続します。
  3. INMEMORY句またはNO INMEMORY句を指定して、CREATE MATERIALIZED VIEWまたはALTER MATERIALIZED VIEW文を実行します。

例6-11 マテリアライズド・ビューの作成とIM列ストアに対する有効化

次の例では、oe.prod_info_mvマテリアライズド・ビューを作成し、IM列ストアに対して有効にします。

CREATE MATERIALIZED VIEW oe.prod_info_mv INMEMORY 
  AS SELECT * FROM oe.product_information;

例6-12 HIGHデータ移入優先度を指定したIM列ストアに対するマテリアライズド・ビューの有効化

次の例では、IM列ストアに対してoe.prod_info_mvマテリアライズド・ビューを有効にします。

ALTER MATERIALIZED VIEW oe.prod_info_mv INMEMORY PRIORITY HIGH;

この例では、INMEMORY句にデフォルトを使用しています。したがって、MEMCOMPRESS FOR QUERYおよびPRIORITY NONEが使用されます。

関連項目:

CREATE MATERIALIZED VIEWまたはALTER MATERIALIZED VIEW文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

6.7.7 データ・ポンプとIM列ストア

impdpコマンドのTRANSFORM=INMEMORY:yオプションを使用して、IM列ストアに対して有効になっているデータベース・オブジェクトをインポートできます。

このオプションを使用すると、データ・ポンプは、IM列ストア句が設定されたすべてのオブジェクトについてその句を維持します。TRANSFORM=INMEMORY:nオプションを指定すると、データ・ポンプは、IM列ストア句が設定されたすべてのオブジェクトからその句を削除します。

また、TRANSFORM=INMEMORY_CLAUSE:stringオプションを使用して、インポート時にダンプ・ファイルのデータベース・オブジェクトに対するIM列ストアを上書きできます。たとえば、このオプションを使用して、インポートするデータベース・オブジェクトのIM列ストアの圧縮を変更できます。

関連項目:

TRANSFORM impdpパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。

6.7.8 Enterprise ManagerでのIM列ストアの使用方法

Enterprise Manager Cloud ControlでIM列ストアを構成および管理できます。

6.7.8.1 Enterprise ManagerでIM列ストアを使用するための前提条件を満たす方法

IM列ストアを使用するためにデータベースを有効にするには、データベースの互換性レベルがリリース12.1.0.2以上にする必要があります。つまり、初期化パラメータCOMPATIBLEの値を12.1.0.0に設定する必要があります。

互換性レベルを設定するには、次の手順を実行します。

  1. Enterprise Managerの「データベース・ホーム」ページで、「管理」メニューから「初期化パラメータ」を選択して「初期化パラメータ」ページにナビゲートします。

    このページを使用すると、互換性レベルを設定または変更できます。

  2. パラメータCOMPATIBLEを検索します。

    パラメータのカテゴリは「その他」です。

  3. 値を12.1.0.0に変更し、「適用」をクリックします。

    データベースを再起動するよう求められます。

データベースが再起動したら、設定した新しい値が有効になります。

同様に、IM列ストアのサイズを設定または変更できます。次の手順を実行します。

  1. Enterprise Managerの「データベース・ホーム」ページで、「管理」メニューから「初期化パラメータ」を選択して「初期化パラメータ」ページにナビゲートします。
  2. パラメータINMEMORY_SIZEを検索します。パラメータのカテゴリは「インメモリー」です。
  3. 値を変更し、「適用」をクリックします。

    この値は、100Mの最小サイズを上回る値に設定できます。

    データベースを再起動するよう求められます。

6.7.8.2 インメモリー列ストアの中央ホーム・ページを使用したデータベース・オブジェクトのインメモリー・サポートの監視

インメモリー列ストアの中央ホーム・ページを使用して、表、索引、パーティション、表領域などのデータベース・オブジェクトのインメモリー・サポートを監視します。オブジェクトに対するインメモリー機能を表示し、インメモリーの使用状況統計を監視できます。

インメモリー列ストアの中央ホーム・ページで、次のアクションを完了できます。

  • 「インメモリー・オブジェクトのアクセス・ヒート・マップ」には、インメモリー・ストア内の上位100オブジェクトと、その相対サイズが表示され、様々な色で表されたオブジェクトのアクセス頻度が表示されます。ヒート・マップをアクティブにする場合は、init.oraパラメータ・ファイルでヒート・マップのオプションをオンにする必要があります。一般に、マップがアクティブ化される前の待機期間は1日です。日付セレクタを使用して、ヒート・マップに表示されるオブジェクトの日付範囲を選択できます。スライダを使用して色の粒度を制御することもできます。

  • 「構成」セクションを使用して、「インメモリー問合せ」、「インメモリー強制」、「デフォルトのインメモリー句」などのステータス設定を表示します。「編集」をクリックして、このセクションに表示される値と設定を変更できる初期化パラメータ・ページに移動します。「パフォーマンス」セクションを使用して、「アクティブ・セッション」のメトリックを表示します。

  • 「オブジェクト・サマリー」セクションを使用して「圧縮係数」と移入オブジェクトに使用したメモリーに関するデータを表示します。「インメモリー対応オブジェクト統計」は、ページの「インメモリー対応オブジェクト統計の表示」リンクからドリルダウンするとポップアップ・ウィンドウで表示されます。

  • 「インメモリー・オブジェクトの分散」セクションを使用して、メモリー内で使用されている様々なオブジェクトのパーセント基準の分散を表示します。このセクションには、「パーティション」、「サブパーティション」、「パーティション化されていない表」および「パーティション化されていないマテリアライズド・ビュー」の分散を示すグラフが含まれます。それぞれの数値はグラフの上に表示されます。

  • 「インメモリー・オブジェクトの検索」セクションを使用して、インメモリーで使用するために指定されたオブジェクトを検索します。検索に使用するパラメータを入力した後で「検索」をクリックします。結果の表には、見つかった各オブジェクトの「名前」が「サイズ」、メモリー内サイズ、ディスク上のサイズ、インメモリーの割合およびその「インメモリー」パラメータとともに表示されます。また、インメモリー、インメモリー以外いずれかのアクセス・オブジェクトも検索できます。ヒート・マップが有効な場合、「インメモリー・オブジェクトの検索」ボックスの「ビュー」フィールドにあるドロップダウン・リストにアクセス・オブジェクトオプションが表示されます。アクセス・オブジェクトを選択すると、インメモリー、インメモリー以外いずれかのアクセス・データを含む上位100オブジェクトをフィルタ処理できます。時間範囲を選択し、その範囲内でオブジェクトを検索できます。インメモリーのすべてのオブジェクト・オプションを選択すると、インメモリー・サイズに基づくインメモリーの上位100オブジェクトのリストを表示できます。

RAC環境を使用している場合は、ヒート・マップの右上にある「インスタンス」選択ボックスでインスタンスを選択し、インスタンス間をすばやく移動できます。

6.7.8.3 表またはパーティションを作成する場合のインメモリー詳細の指定

表またはパーティションを作成するときにIM列ストアの詳細を指定できます。

  1. 「スキーマ」メニューから、「データベース・オブジェクト」「表」オプションの順に選択します。
  2. 「作成」をクリックして、表を作成します。

    表の作成ページが表示されます。インメモリー列ストア・タブを選択して、表のインメモリー・オプションを指定します。

  3. 列が指定されている表の下部で、列レベルのインメモリー詳細をオーバーライドすることを選択します(必要な場合)。
  4. 必要に応じて、「パーティション」タブをクリックできます。
  5. 必要に応じ、ウィザードを使用して表パーティションを作成します。

    パーティションにIM列ストアの詳細を指定するには、「パーティション」タブの表から選択して「拡張オプション」をクリックします。

  6. 表レベル、列レベルおよびパーティション・レベルで必要なIM列ストアの詳細をすべて入力したら、「SQL表示」をクリックして、生成されたSQLを確認します。「OK」をクリックして表を作成します。

6.7.8.4 表のIM列ストアの詳細の表示または編集

表のIM列ストアの詳細を表示または編集できます。

  1. 「スキーマ」メニューから、「データベース・オブジェクト」「表」オプションの順に選択します。
  2. 目的の表を検索し、「表示」をクリックして詳細を表示します。
  3. 「編集」をクリックして、表の編集ページを開きます。

    または、検索ページの「編集」をクリックすることもできます。インメモリー列ストアタブを使用して、表のインメモリー・オプションを指定します。

  4. 必要な詳細を編集し、「適用」をクリックします。

6.7.8.5 パーティションのIM列ストアの詳細の表示または編集

パーティションのIM列ストアの詳細を表示または編集できます。

  1. 「スキーマ」メニューから、「データベース・オブジェクト」「表」オプションの順に選択します。
  2. 目的のパーティションが含まれる表を検索して選択し、「表示」をクリックします。
  3. 「編集」をクリックして、表の編集ページを開きます。

    または、表検索ページの「編集」をクリックすることもできます。

  4. 「パーティション」タブをクリックして、目的のパーティションを選択し、「拡張オプション」をクリックします。
  5. 必要な詳細を編集し、「OK」をクリックして「パーティション」タブに戻ります。
  6. 表の必要なパーティションすべてに同様の変更を行い、「適用」をクリックします。

6.7.8.6 表領域作成時におけるIM列ストアの詳細の指定

表領域を作成するときにIM列ストアの詳細を指定できます。

  1. 「管理」メニューから、「記憶域」を選択し、「表領域」オプションを選択します。
  2. 「作成」をクリックして、表領域を作成します。
  3. 「一般」タブに表示する詳細を入力します。

    インメモリー列ストアタブをクリックします。

  4. 表領域の必要なIM列ストアの詳細をすべて入力したら、「SQL表示」をクリックします。SQL表示ページから「戻る」をクリックしてから、結果ページで「OK」をクリックします。
  5. 「OK」をクリックして表領域を作成します。

表領域のIM列ストアの設定は、表領域で作成されるすべての新しい表に適用されます。表で表領域の構成を上書きする必要がある場合は、個々の表レベルでIM列ストアの構成の詳細を指定する必要があります。

6.7.8.7 表領域のIM列ストアの詳細の表示および編集

表領域のIM列ストアの詳細を表示または編集できます。

  1. 「管理」メニューから、「記憶域」を選択し、「表領域」オプションを選択します。
  2. 目的の表領域を検索して選択し、「表示」をクリックします。
  3. 「編集」をクリックして表領域の編集ページを開き、インメモリー列ストアタブをクリックします。
  4. 必要な詳細を編集し、「適用」をクリックします。

6.7.8.8 マテリアライズド・ビュー作成時におけるIM列ストアの詳細の指定

マテリアライズド・ビューの作成時に、IM列ストアの詳細を指定できます。

  1. 「スキーマ」メニューから、「マテリアライズド・ビュー」を選択し、「マテリアライズド・ビュー」オプションを選択します。
  2. 「作成」をクリックして、マテリアライズド・ビューを作成します。
  3. マテリアライズド・ビューの名前を入力し、問合せを指定します。
  4. インメモリー列ストアタブをクリックして、マテリアライズド・ビューにIM列ストアのオプションを指定します。
  5. 必要なIM列ストアの詳細をすべて入力したら、「SQL表示」をクリックします。「SQL表示」ページから「戻る」をクリックしてから、結果ページで「OK」をクリックします。
  6. 「OK」をクリックしてマテリアライズド・ビューを作成します。

6.7.8.9 マテリアライズド・ビューのIM列ストアの詳細の表示または編集

マテリアライズド・ビューのIM列ストアの詳細を表示または編集できます。

  1. 「スキーマ」メニューから、「マテリアライズド・ビュー」を選択し、「マテリアライズド・ビュー」オプションを選択します。
  2. 目的のマテリアライズド・ビューを検索し、「表示」をクリックして詳細を表示します。
  3. 「編集」をクリックして、マテリアライズド・ビューの編集ページを開きます。
  4. インメモリー列ストアタブをクリックして、マテリアライズド・ビューにIM列ストアのオプションを指定します。
  5. 必要な詳細を編集し、「適用」をクリックします。

6.8 メモリー管理の参考情報

自動メモリー管理は、一部のプラットフォームでのみサポートされています。また、メモリー管理に関する情報について一連のデータ・ディクショナリ・ビューを問い合せることができます。

6.8.1 自動メモリー管理をサポートするプラットフォーム

いくつかのプラットフォームで、自動メモリー管理がサポートされます。

次のプラットフォームでは自動メモリー管理がサポートされます。自動メモリー管理は、SGAおよびPGAのサイズを自動的にチューニングするOracle Databaseの機能で、パフォーマンスを最適化するために、要求に応じてメモリーが領域間で再配分されます。

  • Linux

  • Solaris

  • Windows

  • HP-UX

  • AIX

6.8.2 メモリー管理のデータ・ディクショナリ・ビュー

動的パフォーマンス・ビューのセットがメモリー管理の情報を提供します。

ビュー 説明

V$SGA

システム・グローバル領域(SGA)に関する要約情報が表示されます。

V$SGAINFO

様々なSGAコンポーネントのサイズ、グラニュル・サイズおよび空きメモリーなど、SGAに関するサイズ情報が表示されます。

V$SGASTAT

共有プール、ラージ・プール、JavaプールおよびStreamsプール内に割り当てられているメモリーの量に関する詳細情報が表示されます。

V$PGASTAT

PGAメモリー使用統計と、自動PGAメモリー・マネージャが使用可能な場合(PGA_AGGREGATE_TARGETが設定されている場合)はその統計が表示されます。V$PGASTATでの累積値は、インスタンスの起動以降に蓄積されます。

V$MEMORY_DYNAMIC_COMPONENTS

自動調整された静的なすべてのメモリー・コンポーネントの現在のサイズに関する情報と、各コンポーネントで発生した最後の操作(例: 拡大または縮小)が表示されます。

V$SGA_DYNAMIC_COMPONENTS

すべてのSGAコンポーネントの現在のサイズと各コンポーネントの最後の操作が表示されます。

V$SGA_DYNAMIC_FREE_MEMORY

将来の動的なSGAサイズ変更操作に使用可能なSGAメモリーの容量に関する情報が表示されます。

V$MEMORY_CURRENT_RESIZE_OPS

現在進行中のサイズ変更操作に関する情報が表示されます。サイズ変更の操作は、SGA、インスタンスPGAまたは動的なSGAコンポーネントの拡大または縮小です。

V$SGA_CURRENT_RESIZE_OPS

現在進行中の動的SGAコンポーネントのサイズ変更操作に関する情報が表示されます。

V$MEMORY_RESIZE_OPS

SGA_TARGETおよびPGA_AGGREGATE_TARGETに対する自動拡張および縮小操作も含めて、最後に完了した800件のメモリー・コンポーネント・サイズ変更操作に関する情報が表示されます。

V$SGA_RESIZE_OPS

最後に完了した800件のSGAコンポーネント・サイズ変更操作に関する情報が表示されます。

V$MEMORY_TARGET_ADVICE

自動メモリー管理を使用可能にした場合、MEMORY_TARGETのチューニングに役立つ情報が表示されます。

V$SGA_TARGET_ADVICE

SGA_TARGETのチューニングに役立つ情報が表示されます。

V$PGA_TARGET_ADVICE

PGA_AGGREGATE_TARGETのチューニングに役立つ情報が表示されます。

V$IM_SEGMENTS

IM列ストア内のすべてのセグメントに割り当てられている記憶域に関する情報が表示されます。

注意: このビューは、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。

関連項目:

メモリー管理ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。