ヘッダーをスキップ
Oracle® Database管理者ガイド
11gリリース2 (11.2)
B56301-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 メモリーの管理

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

メモリー管理について

メモリー管理には、データベースの変更に応じたOracle Databaseインスタンス・メモリー構造の最適なサイズのメンテナンスが含まれます。管理する必要があるメモリー構造は、システム・グローバル領域(SGA)とインスタンス・プログラム・グローバル領域(インスタンスPGA)です。

Oracle Databaseでは様々なメモリー管理方法がサポートされており、これらは初期化パラメータの設定で選択されます。自動メモリー管理と呼ばれる方法をお薦めします。

自動メモリー管理

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

手動メモリー管理

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

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

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

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

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

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


注意:

メモリーを管理する最も簡単な方法は、Oracle Enterprise Managerのグラフィカル・ユーザー・インタフェースを使用することです。

Enterprise Managerを使用してメモリーを管理する手順は、次のとおりです。

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

    - Oracle Enterprise Manager Database Controlを使用している場合は、データベース・ホームページにアクセスします。手順については、『Oracle Database 2日でデータベース管理者』を参照してください。

    - Oracle Enterprise Manager Grid Controlを使用している場合は、対象のデータベース・ターゲットに進みます。データベース・ホームページが表示されます。

  2. ページの上部で、「サーバー」をクリックし、「サーバー」ページを表示します。

  3. 「データベース構成」セクションで、「メモリー・アドバイザ」をクリックします。



関連項目:

メモリーの自動管理および手動管理の様々な方法については、『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 (フラッシュ・キャッシュ)もオプションで追加できます。フラッシュ・キャッシュは、SGAに常駐するバッファ・キャッシュの拡張機能で、データベース・ブロックにレベル2のキャッシュを提供します。特に読取りが集中するオンライン・トランザクション処理(OLTP)のワークロードで、応答時間と全体的なスループットを改善できます。フラッシュ・キャッシュは、フラッシュ・メモリーを使用するソリッド状態の記憶装置である1つ以上のフラッシュ・ディスク装置に常駐します。

フラッシュ・キャッシュは、一般的に、メイン・メモリーの増設よりも経済的であり、かつ、ディスク・ドライブよりもはるかに高速です。


関連項目:


自動メモリー管理の使用

ここでは、Oracle Databaseの自動メモリー管理機能のバックグラウンド情報を提供し、この機能を使用可能にする方法を示します。この章では、次の項目について説明します。

自動メモリー管理の概要

インスタンス・メモリーを管理する最も単純な方法は、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の設定を低くしすぎないようにします。

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


注意:

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

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

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

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

  1. SQL*Plusを起動して、SYSDBAユーザーとしてデータベースに接続します。

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

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

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

      SHOW PARAMETER TARGET
      

      SQL*Plusによって、すべての初期化パラメータの値が、パラメータ名にTARGETが付加されて表示されます。

      NAME                                 TYPE        VALUE
      ------------------------------------ ----------- ----------------
      archive_lag_target                   integer     0
      db_flashback_retention_target        integer     1440
      fast_start_io_target                 integer     0
      fast_start_mttr_target               integer     0
      memory_max_target                    big integer 0
      memory_target                        big integer 0
      parallel_servers_target              integer     16
      pga_aggregate_target                 big integer 90M
      sga_target                           big integer 272M
      
    2. 次の問合せを実行して、データベースの起動以降に割り当てられた最大インスタンスPGAを確認します。

      select value 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. データベースを停止して再起動します。

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

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

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

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


注意:

この手順では、SGAとインスタンスPGAのサイズが必要に応じて制限なくチューニングされるように、SGA_TARGETPGA_AGGREGATE_TARGETを0(ゼロ)に設定するように指示しています。これらのパラメータ値を0(ゼロ)に設定する文を削除し、いずれかまたは両方の値を正数にしておくことができます。この場合、値はSGAまたはインスタンスPGAのサイズの最小値として機能します。


関連項目:


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

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

ビューV$MEMORY_TARGET_ADVICEでは、MEMORY_TARGET初期化パラメータに対するチューニング・アドバイスが提供されます。

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より大きくしても効果がないことに注意してください。ただし、ワークロード全体がまだ実行されていない場合、この状況は変わる可能性があります。

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


関連項目:

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

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


メモリーの手動構成

個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を使用禁止にして、手動メモリー管理用にデータベースを構成できます。SGAおよびインスタンスPGAについて、それぞれ2つの異なる手動メモリー管理方法があります。

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

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

次の各項では、これらの手動メモリー管理方法すべてについて詳細に説明します。


関連項目:

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

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

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


関連項目:

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


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

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

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

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

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が割り当てられます。


関連項目:

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

最大SGAサイズの設定

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

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

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

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


注意:

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

表6-2に、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チューニング中のコンポーネントの最小設定として使用されます。詳細は後に説明します。


注意:

より簡単に自動共有メモリー管理を使用可能にするには、Oracle Enterprise Managerを使用します。自動共有メモリー管理を使用可能にし、合計SGAサイズを設定すると、Enterprise ManagerによってALTER SYSTEM文が自動的に生成され、SGA_TARGETが指定したサイズに設定され、自動サイズ設定SGAコンポーネントがすべて0(ゼロ)に設定されます。

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


SGAおよび仮想メモリー

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

ページング・アクティビティを監視する方法は、使用しているオペレーティング・システムのマニュアルを参照してください。また、Enterprise Managerの「ホスト」ページの「パフォーマンス」プロパティ・ページからページング・アクティビティを表示することもできます。

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

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

V$SGA_TARGET_ADVICEビューでは、SGA_TARGETの値の決定に役立つ情報が提供されます。

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

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


関連項目:

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

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

自動共有メモリー管理(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文を発行します。

たとえば、手動共有メモリー管理用にインスタンスのパラメータが現在次のように構成されていて、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

Oracle Enterprise Managerで合計SGAサイズを992Mに設定するか、次の文を発行することによって、自動共有メモリー管理を利用できます。

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から算出された値です。

自動共有メモリー管理の詳細説明

この項では、自動共有メモリー管理について詳細に説明します。内容は次のとおりです。

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

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

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

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の値を動的に増減できます。

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

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

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

  • SGA_TARGET = 512M

  • LARGE_POOL_SIZE = 256M

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

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

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

手動サイズ設定コンポーネントのパラメータも動的に変更できます。ただし、最小サイズは設定しないで、パラメータの値によって、対応するコンポーネントの正確なサイズを指定します。手動サイズ設定コンポーネントのサイズを増やすと、余分なメモリーが1つ以上の自動サイズ設定コンポーネントから削除されます。手動サイズ設定コンポーネントのサイズを減らすと、解放されたメモリーが複数の自動サイズ設定コンポーネントに提供されます。

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

  • SGA_TARGET = 512M

  • DB_8K_CACHE_SIZE = 128M

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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ビットのプラットフォームでのみ有効です。


ブロック・サイズおよびキャッシュ・サイズの設定例
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を使用します。

複数バッファ・プール

異なるバッファ・プールを持つデータベース・バッファ・キャッシュを構成して、バッファ・キャッシュ内にデータを保持するか、またはデータ・ブロックの使用直後に新しいデータがバッファを使用できるようにするかを指定できます。その後、特定のスキーマ・オブジェクト(表、クラスタ、索引およびパーティション)を適切なバッファ・プールに割り当て、キャッシュからデータ・ブロックをエージ・アウトする方法を制御できます。

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

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

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

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


注意:

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


関連項目:

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

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

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

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

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

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

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

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

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

Javaプール・サイズの指定

JAVA_POOL_SIZE初期化パラメータは、SGAのコンポーネントであるJavaプールのサイズを指定または調整する動的なパラメータです。Oracle Databaseによって適切なデフォルト値が選択されます。Javaプールの構成方法は、『Oracle Database Java開発者ガイド』を参照してください。

Streamsプール・サイズの指定

STREAMS_POOL_SIZE初期化パラメータは、SGAのコンポーネントであるStreamsプールのサイズを指定または調整する動的なパラメータです。STREAMS_POOL_SIZEが0(ゼロ)に設定されている場合、Oracle Streams製品では、メモリーが必要時にバッファ・キャッシュからStreamsプールに転送されます。詳細は、『Oracle Streamsレプリケーション管理者ガイド』のStreamsプールの説明を参照してください。

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

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管理およびデプロイメント・ガイド』を参照してください。


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

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

物理メモリー

LOCK_SGAパラメータをTRUEに設定すると、SGA全体が物理メモリーにロックされます。このパラメータは自動メモリー管理では使用できません。

SGA開始アドレス

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

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

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


関連項目:


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


関連項目:

  • この項に記載したビューの詳細は、『Oracle Databaseリファレンス』 を参照してください。

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


手動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パラメータの設定は無視されます。

Database Smart Flash Cacheの構成

ここでは、Database Smart Flash Cache(フラッシュ・キャッシュ)について説明します。この項の内容は、次のとおりです。


関連項目:

フラッシュ・キャッシュについては「メモリー・アーキテクチャの概要」を参照してください。

フラッシュ・キャッシュを構成する場合

次のすべてが該当する場合は、フラッシュ・キャッシュの追加を検討してください。

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

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

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

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


注意:

フラッシュ・キャッシュを複数のインスタンスで共有することはできません。

フラッシュ・キャッシュのサイズの設定

一般的に、フラッシュ・キャッシュのサイズはバッファ・キャッシュのサイズの2から10倍に設定します。乗数を2未満にすると、効果がありません。自動共有メモリー管理を使用している場合は、フラッシュ・キャッシュをSGA_TARGETのサイズの2から10倍にしてください。この計算に使用するSGA_TARGETのサイズは、フル・サイズではなく、その80%でも十分です。

フラッシュ・キャッシュのメモリーのチューニング

バッファ・キャッシュからフラッシュ・キャッシュにデータベース・ブロックを移動するたびに、そのブロックに関する少量のメタデータがバッファ・キャッシュに保持されます。単一インスタンス・データベースの場合、このメタデータによって、約100バイトが消費されます。Oracle Real Application Clusters(Oracle RAC)データベースの場合は、約200バイト消費されます。このため、フラッシュ・キャッシュを追加するときには、この余分なメモリー要件を考慮する必要があります。

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

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

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

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


注意:

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


関連項目:


フラッシュ・キャッシュの初期化パラメータ

表6-4では、フラッシュ・キャッシュの構成に使用する初期化パラメータについて説明しています。

表6-4 フラッシュ・キャッシュの初期化パラメータ

パラメータ 説明

db_flash_cache_file

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

次に、db_flash_cache_fileの有効な値の例を示します。

/dev/fioa1

db_flash_cache_size

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


フラッシュ・キャッシュを無効にするには、ALTER SYSTEMを使用してdb_flash_cache_sizeを0(ゼロ)に設定します。また、ALTER SYSTEMを使用してフラッシュ・キャッシュを元のサイズに戻して再度フラッシュ・キャッシュを有効にすることもできます。ただし、フラッシュ・キャッシュのサイズを動的に変更することはできません。

Oracle Real Application Clusters環境のフラッシュ・キャッシュ

フラッシュ・キャッシュは、Oracle Real Application Clusters環境のすべてのインスタンスに構成するか、どのインスタンスにも構成しないようにする必要があります。

メモリー管理の参考情報

ここでは、メモリー管理に関する次の参考情報を提供します。

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

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

  • Linux

  • Solaris

  • Windows

  • HP-UX

  • AIX

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

次の動的パフォーマンス・ビューには、メモリー管理に関する情報が表示されます。

ビュー 説明
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のチューニングに役立つ情報が表示されます。


関連項目:

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