12 システム・グローバル領域のチューニング
この章では、システム・グローバル領域(SGA)のチューニング方法を説明します。自動メモリー管理を使用してシステムのデータベース・メモリーを管理している場合は、この章で説明されているように、SGAのチューニングは必要ありません。
この章のトピックは、次のとおりです:
12.1 自動共有メモリー管理の使用
自動共有メモリー管理を使用すると、SGAのメモリーが次のメモリー・プールに自動的に配分され、SGAの構成が簡略化されます。
-
データベース・バッファ・キャッシュ(デフォルト・プール)
-
共有プール
-
ラージ・プール
-
Javaプール
-
Streamsプール
自動共有メモリー管理は、SGA_TARGET
パラメータで制御します。SGA_TARGET
パラメータの値を変更すると、これらのメモリー・プールが自動的にサイズ変更されます。これらのメモリー・プールがゼロ以外の値に設定されている場合、自動共有メモリー管理では、これらの値が最低レベルとして使用されます。最低値は、アプリケーション・コンポーネントが正しく機能するために必要な最低メモリー量に基づいて設定することをお薦めします。
次に示すメモリー・キャッシュは手動でサイズ設定されるコンポーネントで、自動共有メモリー管理の制御対象ではありません。
-
REDOログ・バッファ
REDOログ・バッファは、「REDOログ・バッファの構成」で説明されているように、
LOG_BUFFER
初期化パラメータを使用してサイズ設定されます。 -
その他のバッファ・キャッシュ(
KEEP
、RECYCLE
および他の非デフォルト・ブロック・サイズなど)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概要』を参照してください
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.2 SGA_TARGETパラメータの設定
この項では、SGA_TARGET
パラメータの値を設定して、自動共有メモリー管理を有効化および無効化する方法を説明します。
この項では、次の項目について説明します。
12.1.2.1 自動共有メモリー管理の有効化
自動共有メモリー管理を有効化するには、次の初期化パラメータを設定します。
-
STATISTICS_LEVEL
をTYPICAL
または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プール
-
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.5 構成の繰返し
メモリーの割当てを構成する場合は、アプリケーションの必要性により異なりますが、Oracle Databaseメモリー構造に使用可能なメモリーを配分します。Oracle Databaseの構造にメモリーを配分すると、Oracle Databaseが正常に動作するために必要な物理I/O量に影響を与える可能性があります。最初にメモリーを適切に構成しておくと、I/Oシステムが効果的に構成されているかどうかがわかります。
メモリー構成プロセスをひととおり実行した後で、メモリー割当てのステップを繰り返すことが必要となる可能性もあります。実行を繰り返すことによって、後のステップの変更に基づいて前のステップの調整が可能となります。たとえば、バッファ・キャッシュのサイズを小さくすると、共有プールなど別のメモリー構造のサイズを大きくできます。
12.3 共有メモリー管理の監視
表12-1に、SGAのサイズ変更操作に関する情報が表示されるビューを示します。
表12-1 共有メモリー管理ビュー
ビュー | 説明 |
---|---|
|
現在進行中のSGAのサイズ変更操作に関する情報が表示されます。 |
|
最後に完了した800件のSGAのサイズ変更操作に関する情報が表示されます。これには現在進行中の操作は含まれません。 |
|
SGAの動的コンポーネントに関する情報が表示されます。このビューでは、インスタンスの起動後に発生したすべての実行済SGAサイズ変更操作に関する情報が要約されます。 |
|
将来の動的な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ガイドを参照してください