11 データベース・メモリーの割当て

この章では、Oracle Databaseにおけるメモリー割当て、およびメモリー管理の様々な方法について説明します。

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

11.1 データベース・メモリー・キャッシュと他のメモリー構造について

Oracle Databaseでは、メモリー・キャッシュおよびディスクに情報を格納します。メモリー・アクセスは、ディスク・アクセスよりはるかに高速です。ディスク・アクセス(物理I/O)は、メモリー・アクセスに比べ、時間がかかります(通常は約10ミリ秒)。また、物理I/Oでは、デバイス・ドライバやオペレーティング・システムのイベント・スケジューラのパス長のために必要なCPUリソースも増加します。このため、頻繁にアクセスされるオブジェクトに対するデータ・リクエストは、ディスク・アクセスではなくメモリー・アクセスで実行するほうが効率的です。Oracle Databaseメモリー・キャッシュを適切にサイズ設定して効率的に使用すると、データベースのパフォーマンスが大幅に向上します。

パフォーマンスに影響するOracle Databaseの主なメモリー・キャッシュは、次のとおりです。

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

    データベース・バッファ・キャッシュには、ディスクから読み取られたデータ・ブロックが格納されます。

  • REDOログ・バッファ

    REDOログ・バッファには、バッファ・キャッシュのデータ・ブロックに行われた変更のREDOエントリが格納されます。

  • 共有プール

    共有プールからは様々なタイプのデータがキャッシュされ、主に次のコンポーネントで構成されています。

    • ライブラリ・キャッシュ

    • データ・ディクショナリ・キャッシュ

    • サーバー結果キャッシュ

  • ラージ・プール

    ラージ・プールでは、次のようなOracle Database機能に対して大量のメモリー割当てを行うことができます。

    • 共有サーバー・アーキテクチャ

    • パラレル問合せ

    • Recovery Manager (RMAN)

  • Javaプール

    Javaプールには、セッションに特化したJavaコードおよびJava Virtual Machine (JVM)データが格納されます。

  • Streamsプール

    Streamsプールは、Oracle Streamsプロセス用のメモリーを提供します。

  • プロセス・プライベート・メモリー

    プロセス・プライベート・メモリーには、ソートやハッシュ結合などの操作に使用されるメモリーが含まれます。

  • インメモリー列ストア(IM列ストア)

    Oracle Database 12cリリース1 (12.1.0.2)以降、IM列ストアは、表およびパーティションのコピーを格納するオプションの静的SGAプールです。IM列ストアでは、データは特殊な列形式に格納され、これによってスキャン、結合および集計などの操作のパフォーマンスが向上します。

    注意:

    IM列ストアでは、バッファ・キャッシュは置換しませんが、両方のメモリー領域において同じデータを異なる形式で格納するための補足としての役割を果たします。

関連項目:

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

11.2 データベース・メモリーの管理方法

メモリー管理の目標は、必要なデータがメモリー内にある可能性を高くしたり、必要なデータを取り出すプロセスをさらに効率的にし、できるだけ多くの物理I/Oオーバーヘッドを削減することです。この目標を達成するためには、Oracle Databaseメモリー・キャッシュを適切にサイズ設定して効率的に使用することが不可欠です。

Oracle Databaseでは、次のような方法でデータベース・メモリーを管理します。

11.2.1 自動メモリー管理

自動メモリー管理により、Oracle Databaseでは、データベース・メモリーを自動的に管理およびチューニングできます。自動メモリー管理モードでは、共有グローバル領域(SGA)およびプログラム・グローバル領域(インスタンスPGA)のメモリー管理が、Oracle Databaseによって完全に行われます。最も自動化されているため、この方法を使用することをお薦めします。メモリー・プール・サイズを手動で設定する前に、自動メモリー管理を使用することを積極的に検討してください。

自動メモリー管理の使用方法の詳細は、「自動メモリー管理の使用」を参照してください。

11.2.2 自動共有メモリー管理

自動メモリー管理が無効化されている場合、Oracle Databaseでは、自動共有メモリー管理を使用してSGAメモリーを管理します。このモードでは、Oracle Databaseにより、合計SGAメモリーに設定されているターゲット・サイズに基づき、メモリーが自動的に個々のSGAコンポーネントに配分されます。

自動共有メモリー管理の使用方法の詳細は、「自動共有メモリー管理の使用」を参照してください。

11.2.3 手動共有メモリー管理

自動メモリー管理および自動共有メモリー管理の両方が無効化されている場合は、SGAの個々のメモリー・プールのサイズを設定して、手動でSGAメモリーを管理する必要があります。このモードでは、SGAメモリーの分散方法をユーザーが完全に制御できますが、SGAコンポーネントを継続的に手動でチューニングする必要があるため、最も手間がかかります。

手動共有メモリー管理の詳細は、「手動によるSGAコンポーネントのサイズ設定」を参照してください。

11.2.4 自動PGAメモリー管理

自動メモリー管理が無効化されている場合、Oracle Databaseでは、自動PGAメモリー管理を使用してPGAメモリーを管理します。このモードでは、Oracle Databaseにより、合計PGAメモリーに設定されているターゲット・サイズに基づき、メモリーがインスタンスPGAの作業領域に自動的に配分されます。

自動PGAメモリー管理の詳細は、「プログラム・グローバル領域のチューニング」を参照してください。

11.2.5 手動PGAメモリー管理

自動メモリー管理および自動PGAメモリー管理の両方が無効化されている場合は、各作業領域に割り当てられているPGAメモリーの一部を調整し、手動でPGAメモリーを管理する必要があります。ワークロードは常に変化するため、この方法は非常に困難になる可能性があり、薦めしません。Oracle Databaseでは、手動によるPGAメモリー管理がサポートされていますが、自動メモリー管理または自動PGAメモリー管理を使用することをお薦めします。

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

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

  • MEMORY_TARGET

    MEMORY_TARGET初期化パラメータには、ターゲット・メモリー・サイズを指定します。データベースは、SGAおよびインスタンスPGAの間で必要に応じてメモリーを再配分し、このパラメータに指定された値になるよう調整します。このパラメータは動的であるため、データベースを再起動することなく、いつでもこの値を変更できます。

  • MEMORY_MAX_TARGET

    MEMORY_MAX_TARGET初期化パラメータには、最大メモリー・サイズを指定します。このパラメータに指定された値は、MEMORY_TARGET初期化パラメータに設定できる制限値の役割をはたします。このパラメータは静的であるため、インスタンスの起動後にこの値を変更することはできません。

MEMORY_TARGETパラメータのチューニングにアドバイスが必要な場合は、V$MEMORY_TARGET_ADVICEビューを使用してください。

関連項目:

自動メモリー管理の使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

11.4 メモリー管理の監視

表11-1に、メモリー・サイズ変更操作に関する情報が表示されるビューを示します。

表11-1 メモリー管理ビュー

ビュー 説明

V$MEMORY_CURRENT_RESIZE_OPS

現在進行中のメモリー・サイズ変更操作(自動および手動の両方)に関する情報が表示されます。

V$MEMORY_DYNAMIC_COMPONENTS

動的にチューニングされたすべてのメモリー・コンポーネントの現在のサイズ(SGAおよびインスタンスPGAの合計サイズなど)に関する情報が表示されます。

V$MEMORY_RESIZE_OPS

最新800件の実行済メモリー・サイズ変更操作(自動および手動の両方)に関する情報が表示されます。これには現在進行中の操作は含まれません。

V$MEMORY_TARGET_ADVICE

MEMORY_TARGET初期化パラメータのチューニング・アドバイスが表示されます。

関連項目:

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