12 システム・グローバル領域のチューニング

この章では、システム・グローバル領域(SGA)のチューニング方法を説明します。自動メモリー管理を使用してシステムのデータベース・メモリーを管理している場合は、この章で説明されているように、SGAのチューニングは必要ありません。

この章のトピックは、次のとおりです:

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

自動共有メモリー管理を使用すると、SGAのメモリーが次のメモリー・プールに自動的に配分され、SGAの構成が簡略化されます。

  • データベース・バッファ・キャッシュ(デフォルト・プール)

  • 共有プール

  • ラージ・プール

  • Javaプール

  • Streamsプール

自動共有メモリー管理は、SGA_TARGETパラメータで制御します。SGA_TARGETパラメータの値を変更すると、これらのメモリー・プールが自動的にサイズ変更されます。これらのメモリー・プールがゼロ以外の値に設定されている場合、自動共有メモリー管理では、これらの値が最低レベルとして使用されます。最低値は、アプリケーション・コンポーネントが正しく機能するために必要な最低メモリー量に基づいて設定することをお薦めします。

次に示すメモリー・キャッシュは手動でサイズ設定されるコンポーネントで、自動共有メモリー管理の制御対象ではありません。

  • REDOログ・バッファ

    REDOログ・バッファは、「REDOログ・バッファの構成」で説明されているように、LOG_BUFFER初期化パラメータを使用してサイズ設定されます。

  • その他のバッファ・キャッシュ(KEEPRECYCLEおよび他の非デフォルト・ブロック・サイズなど)

    KEEPプールは、「KEEPプールの構成」で説明されているように、DB_KEEP_CACHE_SIZE初期化パラメータを使用してサイズ設定されます。

    RECYCLEプールは、「RECYCLEプールの構成」で説明されているように、DB_RECYCLE_CACHE_SIZE初期化パラメータを使用してサイズ設定されます。

  • 固定SGAおよびその他の内部割当て

    固定SGAおよびその他の内部割当ては、DB_nK_CACHE_SIZE初期化パラメータを使用してサイズ設定されます。

これらのメモリー・キャッシュに割り当てられたメモリーは、自動チューニングされたメモリー・プールの値が自動共有メモリー管理によって計算されるときに、SGA_TARGETパラメータの値から引かれます。

次の各項では、SGA_TARGETパラメータの値へのアクセス方法および設定方法を説明します。

関連項目:

  • SGAの詳細は、『Oracle Database概要』を参照してください

  • SGAの管理の詳細は、『Oracle Database管理者ガイド』を参照してください

  • 初期化パラメータの使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください

12.1.1 SGA_TARGETパラメータを設定するためのユーザー・インタフェース

この項では、SGA_TARGETパラメータの値を設定するためのユーザー・インタフェースについて説明します。

この項では、次の項目について説明します。

12.1.1.1 Oracle Enterprise Manager Cloud ControlでのSGA_TARGETパラメータの設定

メモリー・パラメータSGAページからSGAサイズ・アドバイザにアクセスすることにより、Oracle Enterprise Manager Cloud Control (Cloud Control)でSGA_TARGETパラメータの値を変更できます。

12.1.1.2 コマンドライン・インタフェースでのSGA_TARGETパラメータの設定

V$SGA_TARGET_ADVICEビューを問い合せ、ALTER SYSTEMコマンドを使用することにより、コマンドライン・インタフェースでSGA_TARGETパラメータの値を変更できます。

12.1.2 SGA_TARGETパラメータの設定

この項では、SGA_TARGETパラメータの値を設定して、自動共有メモリー管理を有効化および無効化する方法を説明します。

この項では、次の項目について説明します。

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

自動共有メモリー管理を有効化するには、次の初期化パラメータを設定します。

  • STATISTICS_LEVELTYPICALまたはALL

  • SGA_TARGETをゼロ以外の値に

    SGA_TARGETパラメータは、SGA_MAX_SIZE初期化パラメータの値以下に設定できます。SGA_TARGETパラメータの値は、SGA専用にするメモリーの容量に設定します。

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

自動共有メモリー管理を無効化するには、インスタンスの起動時にSGA_TARGETパラメータの値を動的に0に設定します。

これにより、自動共有メモリー管理が無効化され、現在の自動チューニングされたサイズが各メモリー・プールに使用されます。必要な場合は、「手動によるSGAコンポーネントのサイズ設定」の説明に従い、各メモリー・プールのサイズを手動で再設定できます。

12.2 手動によるSGAコンポーネントのサイズ設定

システムで自動メモリー管理または自動共有メモリー管理が使用されていない場合は、次のSGAコンポーネントのサイズを手動で構成する必要があります。

  • データベース・バッファ・キャッシュ

    データベース・バッファ・キャッシュは、「データベース・バッファ・キャッシュの構成」で説明されているように、DB_CACHE_SIZE初期化パラメータを使用してサイズ設定されます。

  • 共有プール

    共有プールは、「共有プールの構成」で説明されているように、SHARED_POOL_SIZE初期化パラメータを使用してサイズ設定されます。

  • ラージ・プール

    ラージ・プールは、「ラージ・プールの構成」で説明されているように、LARGE_POOL_SIZE初期化パラメータを使用してサイズ設定されます。

  • Javaプール

    Javaプールは、JAVA_POOL_SIZE初期化パラメータを使用してサイズ設定されます。

  • Streamsプール

    Streamsプールは、STREAMS_POOL_SIZE初期化パラメータを使用してサイズ設定されます。

  • IM列ストア

    IM列ストアは、INMEMORY_SIZE初期化パラメータを使用してサイズ設定されます。

これらのパラメータの値は、ALTER SYSTEM文を使用して動的に構成することも可能です。

これらのSGAコンポーネントのサイズを構成する前に、次の内容を考慮してください。

関連項目:

  • Javaのメモリー使用量およびJAVA_POOL_SIZE初期化パラメータの詳細は、『Oracle Database Java開発者ガイド』を参照してください

  • STREAMS_POOL_SIZE初期化パラメータの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください

  • INMEMORY_SIZE初期化パラメータの詳細は、Oracle Database In-Memoryガイドを参照してください

12.2.1 SGAのサイズ設定単位

バッファ・キャッシュ、共有プール、ラージ・プールおよびJavaプールのメモリーは、グラニュル単位で割り当てられます。SGAのサイズが1GBより少ない場合、グラニュル・サイズは4MBです。SGAサイズが1GBを超えている場合、グラニュル・サイズは16MBに変化します。グラニュル・サイズは、データベース・インスタンスの起動時に計算されて固定されます。このサイズは、インスタンスの存続期間中は変化しません。

SGAで現在使用されているグラニュル・サイズを表示するには、V$SGA_DYNAMIC_COMPONENTSビューを使用します。それと同じグラニュルのサイズがSGAのすべての動的コンポーネントで使用されます。

12.2.2 SGAの最大サイズ

データベース・インスタンスで使用できる最大メモリー量は、インスタンス起動時にSGA_MAX_SIZE初期化パラメータで決定されます。SGAの総サイズは、SGA_MAX_SIZEパラメータの値まで拡張できます。SGA_MAX_SIZEパラメータの値は、すべてのSGAコンポーネントの集計にデフォルト設定されています。

SGA_MAX_SIZEパラメータの値が設定されていない場合は、必要であれば、1つのキャッシュのサイズを減らして、そのメモリーを別のキャッシュに再割当てします。または、SGA_MAX_SIZEパラメータの値を、バッファ・キャッシュや共有プールなど、すべてのSGAコンポーネントの合計より大きく設定することも可能です。こうすることにより、別のキャッシュ・サイズを減らさずに、キャッシュ・サイズを動的に増加できます。

注意:

SGA_MAX_SIZEパラメータの値は、動的にサイズ変更できません。

12.2.3 アプリケーションの考慮事項

メモリーを構成する場合は、アプリケーションの必要性に基づいて、メモリー・キャッシュを適切にサイズ設定してください。逆に、アプリケーションのメモリー・キャッシュの使用率をチューニングすると、リソース要件を大幅に削減できます。メモリー・キャッシュを効率的に使用すると、ラッチ、CPU、I/Oシステムなどの関連リソースに対する負荷も軽減できます。

最適なパフォーマンスを得るために、次のことを考慮してください。

  • オペレーティング・システムおよびデータベース・リソースを、最も効率的に使用するようキャッシュを設計してください。

  • アプリケーションの必要性を最もよく反映するように、Oracle Databaseメモリー構造にメモリーを割り当ててください。

  • 既存のアプリケーションに変更または追加を行う場合は、変更されたアプリケーションの必要性に対応するようOracle Databaseのメモリー構造のサイズを変更してください。

  • アプリケーションがJavaを使用する場合、Javaプールのデフォルト構成を変更する必要があるかどうかを調べてください。

関連項目:

Javaのメモリー使用量の詳細は、『Oracle Database Java開発者ガイド』を参照してください。

12.2.4 オペレーティング・システムのメモリー使用量

大半のオペレーティング・システムでは、メモリーを構成する際に次のことを考慮することが重要です。

関連項目:

オペレーティング・システムのメモリー使用方法のチューニングの詳細は、オペレーティング・システムのハードウェアとソフトウェアのマニュアル、およびオペレーティング・システム固有のOracleマニュアルを参照してください。

12.2.4.1 ページングの削減

ページングは、新しいページをメモリーにロードするため、オペレーティング・システムがメモリー常駐ページをディスクに転送する場合に行われます。多くのオペレーティング・システムは、実メモリーに格納しきれない大量の情報を収容するために、ページングを行います。大半のオペレーティング・システムでは、ページングはパフォーマンスを低下させます。

ホスト・システムで大量のページングが発生しているかどうかを判断するには、オペレーティング・システムのユーティリティを使用して、オペレーティング・システムを調べます。大量のページングが発生している場合は、メモリーが割り当てられているメモリー・キャッシュを保持できるほど、合計システム・メモリーが大きくない可能性があります。システムの総メモリー量を増加するか、割り当てられているメモリー量を低減することを検討してください。

12.2.4.2 メイン・メモリーへのSGAの格納

SGAの目的は、迅速なアクセスのためにメモリー内にデータを格納することであるため、SGAはメイン・メモリー内に存在する必要があります。SGAのページがディスクにスワップされると、データに迅速にアクセスできなくなります。多くのオペレーティング・システムでは、ページングによる損失は、大規模なSGAがもたらす利益をかなり上回ります。

この項では、次の項目について説明します。

12.2.4.2.1 SGAメモリー割当ての表示

SGAとその各内部構造に割り当てられているメモリー量を確認するには、次の例に示すように、SQL*PlusでSHOW SGA文を使用します。

SQL> SHOW SGA

この文の出力を次に示します。

Total System Global Area  840205000 bytes
Fixed Size                   279240 bytes
Variable Size             520093696 bytes
Database Buffers          318767104 bytes
Redo Buffers                1064960 bytes
12.2.4.2.2 物理メモリーへのSGAのロック

SGAのページ・アウトを回避するには、LOCK_SGAパラメータを有効化して、SGAを物理メモリーにロックすることを検討してください。LOCK_SGAパラメータを有効化した場合、MEMORY_TARGETおよびMEMORY_MAX_TARGETパラメータは使用されません。

12.2.4.3 個々のユーザーへの十分なメモリーの割当て

SGAをサイズ設定する場合は、個々のサーバー・プロセスとその他のプログラムがシステム上で作動するように十分なメモリーを使用できるようにします。

12.2.5 構成の繰返し

メモリーの割当てを構成する場合は、アプリケーションの必要性により異なりますが、Oracle Databaseメモリー構造に使用可能なメモリーを配分します。Oracle Databaseの構造にメモリーを配分すると、Oracle Databaseが正常に動作するために必要な物理I/O量に影響を与える可能性があります。最初にメモリーを適切に構成しておくと、I/Oシステムが効果的に構成されているかどうかがわかります。

メモリー構成プロセスをひととおり実行した後で、メモリー割当てのステップを繰り返すことが必要となる可能性もあります。実行を繰り返すことによって、後のステップの変更に基づいて前のステップの調整が可能となります。たとえば、バッファ・キャッシュのサイズを小さくすると、共有プールなど別のメモリー構造のサイズを大きくできます。

12.3 共有メモリー管理の監視

表12-1に、SGAのサイズ変更操作に関する情報が表示されるビューを示します。

表12-1 共有メモリー管理ビュー

ビュー 説明

V$SGA_CURRENT_RESIZE_OPS

現在進行中のSGAのサイズ変更操作に関する情報が表示されます。

V$SGA_RESIZE_OPS

最後に完了した800件のSGAのサイズ変更操作に関する情報が表示されます。これには現在進行中の操作は含まれません。

V$SGA_DYNAMIC_COMPONENTS

SGAの動的コンポーネントに関する情報が表示されます。このビューでは、インスタンスの起動後に発生したすべての実行済SGAサイズ変更操作に関する情報が要約されます。

V$SGA_DYNAMIC_FREE_MEMORY

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

関連項目:

これらのビューについては、『Oracle Databaseリファレンス』を参照してください。

12.4 インメモリー列ストアによる問合せパフォーマンスの改善

インメモリー列ストア(IM列ストア)は任意のシステム・グローバル領域(SGA)です。ここには、表、パーティションおよびその他のデータベース・オブジェクトのコピーが列形式で格納されています。この列データは迅速にスキャンできるように最適化されています。IM列ストアはデータベース・オブジェクトをメモリー内に格納するため、ディスク上に格納されたデータに対してスキャン、問合せ、結合、およびそのデータの集計を実行した場合と比較して、Oracle Databaseはこれらの操作をはるかに速く実行できます。

注意:

  • IM列ストアおよびデータベース・バッファ・キャッシュには、同じデータが異なるフォーマットで保存されます。IM列ストアはデータベース・バッファ・キャッシュの行ベースのストレージを置き換えるものではなく、問合せのパフォーマンスを改善するための補足的な役割を果たします。

  • IM列ストアは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

関連項目:

IM列ストアの詳細は、Oracle Database In-Memoryガイドを参照してください