6 メモリーの管理
メモリー管理には、データベースの変更に応じたOracle Databaseインスタンス・メモリー構造の最適なサイズのメンテナンスが含まれます。
- メモリー管理について
管理する必要があるメモリー構造は、システム・グローバル領域(SGA)とインスタンス・プログラム・グローバル領域(インスタンスPGA)です。Oracle Databaseでは様々なメモリー管理方法がサポートされており、これらは初期化パラメータの設定で選択されます。 - メモリー・アーキテクチャの概要
Oracle Databaseに関連する基本メモリー構造を理解します。 - 自動メモリー管理の使用
Oracle Databaseインスタンスが自動的にメモリーを管理およびチューニングできるようにすることができます。 - メモリーの手動構成
個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を無効にし、手動メモリー管理用にデータベースを構成できます。 - 強制フル・データベース・キャッシュ・モードの使用方法
Oracle Databaseインスタンスは、全データベースをバッファ・キャッシュにキャッシュできます。 - Database Smart Flash Cacheの構成
データベース・スマート・フラッシュ・キャッシュ機能は、ソリッド・ステート・デバイス(SSD)テクノロジを使用してデータベース・バッファ・キャッシュを透過的に拡張します。Database Smart Flash Cacheにより、ディスクI/O量が削除され、同等サイズのRAMを追加するより低いコストでOracleデータベースのパフォーマンスを大幅に向上させることができます。 - Oracle Database In-Memoryによる問合せパフォーマンスの向上
Oracle Database In-Memory (Database In-Memory)は、Oracle Database 12cリリース1 (12.1.0.2)に最初に導入された一連の機能であり、リアルタイム分析および混合ワークロードのパフォーマンスを大幅に改善します。 - Memoptimized Rowstoreを使用する高パフォーマンス・データ・ストリーミングの有効化
Memoptimized Rowstoreでは、IoT (モノのインターネット)アプリケーションなど、アプリケーションでの高パフォーマンス・データ・ストリーミングが可能になります。この機能は、通常は、同時に多数のクライアントから単一行挿入で少量のデータをストリーミングし、また、非常に高い頻度でクライアントに対してデータを問い合せます。 - メモリー管理の参考情報
自動メモリー管理は、一部のプラットフォームでのみサポートされます。また、メモリー管理に関する情報について一連のデータ・ディクショナリ・ビューを問い合せることができます。
親トピック: 基本データベース管理
6.1 メモリー管理について
管理する必要があるメモリー構造は、システム・グローバル領域(SGA)とインスタンス・プログラム・グローバル領域(インスタンスPGA)です。Oracle Databaseでは様々なメモリー管理方法がサポートされており、これらは初期化パラメータの設定で選択されます。
自動メモリー管理
Oracle DatabaseはSGAメモリーとインスタンスPGAメモリーを完全に自動的に管理できます。インスタンスで使用される合計メモリー・サイズを指定するだけで、Oracle Databaseが必要に応じてSGAとインスタンスPGAの間でメモリーを動的に交換し、処理ニーズに対応します。この機能を自動メモリー管理と呼びます。このメモリー管理の方法では、データベースは個別SGAコンポーネントのサイズと個別PGAのサイズも動的にチューニングします。SGAおよびPGAメモリーの合計サイズが4GB以下であるデータベースの自動メモリー管理をお薦めします。
手動メモリー管理
個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を使用禁止にして、手動メモリー管理用にデータベースを構成できます。手動メモリー管理として使用できる方法はいくつかあります。これらの方法には、自動の部分が、ある度合で残っているものがあります。それらの方法では、DBAに要求される作業量および知識量が異なります。次の方法があります。
-
自動共有メモリー管理 - SGA用
-
手動共有メモリー管理 - SGA用
-
自動PGAメモリー管理 - インスタンスPGA用
-
手動PGAメモリー管理 - インスタンスPGA用
これらのメモリー管理方法については、この章で後述します。
Database Configuration Assistant (DBCA)を使用してデータベースを作成する際に基本インストール・オプションを選択すると、システム・メモリーが4GB以下である場合、自動メモリー管理が使用可能になります。システム・メモリーが4GBを超える場合は、自動メモリー管理は使用禁止になり、自動共有メモリー管理が使用可能になります。拡張インストールを選択した場合は、DBCAを使用して、自動メモリー管理または自動共有メモリー管理を選択できます。
SGAおよびPGAメモリーの合計サイズが4GB以上である場合の自動共有メモリー管理をお薦めします。
ノート:
メモリーを管理する最も簡単な方法は、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に、これらのメモリー構造の関係を示します。
データベースが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_POLICY
がAUTO
またはADAPTIVE
に設定されている場合、パラレル問合せで大規模表キャッシュを使用できます。 -
シリアル問合せ
シングル・インスタンス構成のみで、
DB_BIG_TABLE_CACHE_PERCENT_TARGET
初期化パラメータがゼロ以外の値に設定されている場合、シリアル問合せで大規模表キャッシュを使用できます。
関連項目:
-
Oracle Databaseインスタンスのメモリー・アーキテクチャの詳細は、『Oracle Database概要』を参照してください。
-
DB_BIG_TABLE_CACHE_PERCENT_TARGET
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
PARALLEL_DEGREE_POLICY
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
大規模表キャッシュの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
親トピック: メモリーの管理
6.3 自動メモリー管理の使用
Oracle Databaseインスタンスが自動的にメモリーを管理およびチューニングできるようにすることができます。
- 自動メモリー管理について
インスタンス・メモリーの管理は、Oracle Databaseインスタンスが自動的に管理およびチューニングできるようにすることが最も簡単な方法です。これを実行するには、ほとんどのプラットフォームの場合、ターゲット・メモリー・サイズ初期化パラメータ(MEMORY_TARGET
)とオプションで最大メモリー・サイズ初期化パラメータ(MEMORY_MAX_TARGET
)のみを設定します。 - 自動メモリー管理の有効化
データベースの作成時に(DBCAで適切なオプションを選択するか、またはCREATE DATABASE
SQL文に適切な初期化パラメータを設定して)自動メモリー管理を使用可能にしなかった場合は、後で自動メモリー管理を使用可能にできます。自動メモリー管理を有効化する場合は、データベースを停止して再起動する必要があります。 - 自動メモリー管理の監視およびチューニング
動的なパフォーマンス・ビューV$MEMORY_DYNAMIC_COMPONENTS
に、SGAとインスタンスPGAの合計サイズなど、動的にチューニングされたすべてのメモリー・コンポーネントの現行サイズが示されます。
親トピック: メモリーの管理
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
の設定を低くしすぎないようにします。
ノート:
-
データベース・インスタンスの合計物理メモリーが4GBを超える場合は、データベースのインストール時および作成時に自動メモリー管理オプションを指定できません。このような環境では、自動共有メモリー管理の使用をお薦めします。
-
LOCK_SGA
初期化パラメータがTRUE
に設定されている場合は、自動メモリー管理を使用可能にできません。このパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
親トピック: 自動メモリー管理の使用
6.3.2 自動メモリー管理の有効化
データベースの作成時に(DBCAで適切なオプションを選択するか、またはCREATE DATABASE
SQL文に適切な初期化パラメータを設定して)自動メモリー管理を使用可能にしなかった場合は、後で自動メモリー管理を使用可能にできます。自動メモリー管理を有効化する場合は、データベースを停止して再起動する必要があります。
自動メモリー管理を有効にするには:
-
SQL*Plusを起動して、
SYSDBA
管理権限でOracle Databaseインスタンスに接続します。手順については、「SQL*Plusを使用したデータベースへの接続」および「データベース管理者の認証」を参照してください。
-
MEMORY_TARGET
の最小値を次の方法で計算します。-
次の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
パラメータが未設定の場合、その設定の詳細は、「自動共有メモリー管理を使用可能にする方法」を参照してください。 -
次の問合せを実行して、データベースの起動以降に割り当てられた最大インスタンスPGA (MB)を確認します。
SELECT VALUE/1048576 FROM V$PGASTAT WHERE NAME='maximum PGA allocated';
-
ステップ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)以上にする必要があります。 -
-
使用する
MEMORY_TARGET
の値を選択します。この値は、ステップ2で計算した最小値にするか、または使用可能な物理メモリーが十分ある場合はこれより大きい値を使用できます。
-
MEMORY_MAX_TARGET
初期化パラメータについては、予測可能な範囲で、データベースに割り当てる予定の最大メモリー量に決定します。つまり、SGAとインスタンスPGAサイズの合計に対する最大値を決定します。この値は、前述のステップで選択したMEMORY_TARGET
の値以上に設定できます。 -
次のいずれかの操作を行います。
-
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_TARGET
はMEMORY_TARGET
の値に自動的に設定されます。MEMORY_TARGET
の行を省略してMEMORY_MAX_TARGET
を指定した場合、MEMORY_TARGET
パラメータはデフォルトで0 (ゼロ)に設定されます。起動後、MEMORY_MAX_TARGET
の値を超えないかぎり、MEMORY_TARGET
を0以外の値に動的に変更できます。 -
-
データベースを停止して再起動します。
手順については、「起動と停止」を参照してください。
-
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メモリー管理の使用」を参照してください。
関連項目:
-
ALTER
SYSTEM
SQL文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: 自動メモリー管理の使用
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 メモリーの手動構成
個々のメモリー・コンポーネントのサイズをより直接的に制御する場合は、自動メモリー管理を使用禁止にして、手動メモリー管理用にデータベースを構成できます。
- 手動メモリー管理について
手動でメモリーを管理するには、SGA用に2つ、およびインスタンスPGA用に2つの異なる方法があります。 - 自動共有メモリー管理の使用
自動共有メモリー管理により、SGAメモリー管理が簡単になります。 - 手動共有メモリー管理の使用
共有メモリーを手動で管理するには、最初に、自動メモリー管理と自動共有メモリー管理がどちらも無効になっていることを確認します。その次に、メモリー・コンポーネントを手動で構成、監視およびチューニングします。 - 自動PGAメモリー管理の使用
デフォルトでは、インスタンスPGA専用のメモリーの合計量を、Oracle Databaseが自動的に、グローバルに管理します。この量は、初期化パラメータPGA_AGGREGATE_TARGET
を設定することによって制御できます。 - 手動PGAメモリー管理の使用
Oracle Databaseは、手動でSQL作業領域をチューニングする、手動によるPGAメモリー管理をサポートします。
親トピック: メモリーの管理
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_TARGET
初期化パラメータを使用してインスタンスに使用可能なSGAメモリーの合計量を指定し、メモリーを最も効率的に使用できるようにするために、Oracle Databaseが様々なSGAコンポーネントにこのメモリーを自動的に配分します。 - SGAのコンポーネントおよびグラニュル
SGAは、メモリー割当て要求の特定のクラスを満たすために使用されるメモリーのプールであるいくつかのメモリー・コンポーネントで構成されます。 - 最大SGAサイズの設定
SGA_MAX_SIZE
初期化パラメータは、インスタンスの存続期間のためのシステム・グローバル領域の最大サイズを指定します。 - SGAターゲット・サイズの設定
自動共有メモリー管理機能を有効にするには、SGA_TARGET
初期化パラメータを0 (ゼロ)以外の値に設定します。このパラメータにより、SGAの合計サイズが設定されます。これは、個別のコンポーネントのセットの割当てメモリーを制御するパラメータにかわるもので、これらは必要に応じて自動的かつ動的にサイズ調整(チューニング)されるようになりました。 - 自動共有メモリー管理を使用可能にする方法
自動共有メモリー管理(ASMM)を使用可能にする手順は、ASMMへの変更を、手動共有メモリー管理または自動メモリー管理から行うかどうかによって異なります。 - 自動的にサイズ調整されるSGAコンポーネントの最小値の設定
自動的にサイズ調整されるSGAコンポーネントのサイズは、これらのコンポーネントに対応するパラメータの最小値を指定することにより、いくらかの制御を行使できます。この設定は、特定のコンポーネントで最低限のメモリーが確保されていないとアプリケーションが正しく動作しないことがわかっている場合に便利です。 - SGA_TARGETの動的変更
SGA_TARGET
パラメータは、SGA_MAX_SIZE
パラメータに指定された値まで動的に増加でき、少なくすることもできます。 - 自動的にサイズ調整されるコンポーネントのパラメータの変更
自動共有メモリー管理が有効な場合、自動的にサイズ調整されるコンポーネントに手動で指定したサイズは、コンポーネントのサイズの下限としての役割を果たします。この制限は、対応するパラメータの値を変更することで動的に変更できます。 - 手動でサイズ調整するコンポーネントのパラメータの変更
手動でサイズ調整するコンポーネントのパラメータも、動的に変更できます。ただし、最小サイズは設定しないで、パラメータの値によって、対応するコンポーネントの正確なサイズを指定します。
関連項目:
-
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(ゼロ)または最小値に設定する必要があります。
- SGAターゲットと自動的にサイズ調整されるSGAコンポーネント
SGA_TARGET
を設定すると、いくつかのSGAコンポーネントが自動的にサイズ調整されます。 - SGAと仮想メモリー
ほとんどのシステムで最適なパフォーマンスを実現するには、SGA全体が実メモリーに収まる必要があります。実メモリーに収まらず、その一部を格納するために仮想メモリーが使用される場合は、データベース・システム全体のパフォーマンスが大幅に低下する可能性があります。これは、オペレーティング・システムによってSGAの一部でページング(ディスクの読取りおよび書込み)が実行されるためです。 - SGAターゲット・サイズの監視とチューニング
V$SGAINFO
ビューは、様々なSGAコンポーネントの現在のチューニング・サイズに関する情報を提供します。V$SGA_TARGET_ADVICE
ビューでは、SGA_TARGET
の値の決定に役立つ情報が提供されます。
親トピック: 自動共有メモリー管理の使用
6.4.2.4.1 SGAターゲットおよび自動サイズ設定SGAコンポーネント
SGA_TARGET
を設定すると、いくつかのSGAコンポーネントが自動的にサイズ調整されます。
次の表に、SGA_TARGET
を設定すると自動的にサイズ調整されるSGAコンポーネントを示します。各SGAコンポーネントについては、関連する初期化パラメータを示します。
表6-2 自動サイズ設定SGAコンポーネントと対応するパラメータ
SGAコンポーネント | 初期化パラメータ |
---|---|
固定SGAおよびOracle Databaseインスタンスに必要なその他の内部割当て |
該当なし |
共有プール |
|
ラージ・プール |
|
Javaプール |
|
バッファ・キャッシュ |
|
Streamsプール |
|
表6-3にリストされているパラメータは、設定された場合、SGA_TARGET
からメモリーを取得しますが、表6-2にリストされたコンポーネントに使用されるメモリーは残されます。
表6-3 SGA_TARGETの領域を使用する手動サイズ設定SGAコンポーネント
SGAコンポーネント | 初期化パラメータ |
---|---|
ログ・バッファ |
|
KEEPバッファ・キャッシュおよびRECYCLEバッファ・キャッシュ |
|
非標準ブロック・サイズ・バッファ・キャッシュ |
|
SGA_TARGET
を0(ゼロ)以外の値に設定する以外に、自動サイズ設定SGAコンポーネントの完全な自動チューニングを使用可能にするために、表6-2に示されているすべての初期化パラメータを0(ゼロ)に設定する必要があります。
または、自動サイズ設定SGAコンポーネントを0(ゼロ)以外の値に設定すると、その値がSGAチューニング中のコンポーネントの最小設定として使用されます。詳細は後に説明します。
親トピック: SGAターゲット・サイズの設定
6.4.2.4.2 SGAおよび仮想メモリー
ほとんどのシステムで最適なパフォーマンスを実現するには、SGA全体が実メモリーに収まる必要があります。実メモリーに収まらず、その一部を格納するために仮想メモリーが使用される場合は、データベース・システム全体のパフォーマンスが大幅に低下する可能性があります。これは、オペレーティング・システムによってSGAの一部でページング(ディスクの読取りおよび書込み)が実行されるためです。
ページング・アクティビティを監視する方法は、使用しているオペレーティング・システムのマニュアルを参照してください。Cloud Controlを使用して、ページング・アクティビティを表示することもできます。詳細は、『Oracle Database 2日でパフォーマンス・チューニング・ガイド』を参照してください。
親トピック: SGAターゲット・サイズの設定
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リファレンス』を参照してください
親トピック: SGAターゲット・サイズの設定
6.4.2.5 自動共有メモリー管理を使用可能にする方法
自動共有メモリー管理(ASMM)を使用可能にする手順は、手動共有メモリー管理からASMMに変更するか、自動メモリー管理からASMMに変更するかによって異なります。
手動共有メモリー管理からASMMに変更するには:
-
次の問合せを実行して
SGA_TARGET
の値を取得します。SELECT ( (SELECT SUM(value) FROM V$SGA) - (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY) ) "SGA_TARGET" FROM DUAL;
-
テキスト形式の初期化パラメータ・ファイルを編集してデータベースを再起動するか、または次の文を発行して
SGA_TARGET
の値を設定します。ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]
valueはステップ1で計算した値、またはすべてのSGAコンポーネント・サイズの合計と
SGA_MAX_SIZE
の間の値です。ALTER
SYSTEM
文とそのSCOPE
句の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 -
次のいずれかの操作を行います。
-
より完全な自動チューニングを行うには、表6-2に記載されている自動サイズ設定SGAコンポーネントの値を0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、または
ALTER
SYSTEM
文を発行します。 -
1つ以上の自動サイズ設定SGAコンポーネントの最小サイズを制御するには、これらのコンポーネントのサイズを目的の値に設定します。(詳細は、次の項を参照してください。)その他の自動サイズ設定SGAコンポーネントの値を0(ゼロ)に設定します。このためには、テキスト形式の初期化パラメータ・ファイルを編集するか、または
ALTER
SYSTEM
文を発行します。
-
自動メモリー管理からASMMに変更するには:
例6-1 ASMMの使用
たとえば、手動共有メモリー管理用にインスタンスのパラメータが現在次のように構成されていて、SGA_MAX_SIZE
が1200Mに設定されているとします。
-
SHARED_POOL_SIZE
= 200M -
DB_CACHE_SIZE
= 500M -
LARGE_POOL_SIZE
= 200M
また、問合せが次のような結果であるとします。
問合せ | 結果 |
---|---|
|
1200M |
|
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_TARGET
をSGA_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 手動共有メモリー管理の使用
共有メモリーを手動で管理するには、最初に、自動メモリー管理と自動共有メモリー管理がどちらも無効になっていることを確認します。その次に、メモリー・コンポーネントを手動で構成、監視およびチューニングします。
- 手動共有メモリー管理について
自動メモリー管理または自動共有メモリー管理を使用しない場合は、いくつかのSGAコンポーネントのサイズを手動で構成し、データベース・ワークロードの変更に基づいてこれらのサイズを監視およびチューニングする必要があります。これらのSGAコンポーネントのサイズを制御するパラメータの設定のガイドラインに従うことができます。 - 手動共有メモリー管理を使用可能にする方法
それ自体で手動共有メモリー管理を使用可能にする初期化パラメータはありません。自動メモリー管理と自動共有メモリー管理の両方を使用禁止にすることによって、手動共有メモリー管理が事実上使用可能になります。 - バッファ・キャッシュ初期化パラメータの設定
SGAのバッファ・キャッシュ・コンポーネントのサイズは、バッファ・キャッシュ初期化パラメータによって決まります。 - 共有プール・サイズの指定
SHARED_POOL_SIZE
初期化パラメータは、SGAの共有プール・コンポーネントのサイズを指定または調整できる動的パラメータです。Oracle Databaseによって適切なデフォルト値が選択されます。 - ラージ・プール・サイズの指定
LARGE_POOL_SIZE
初期化パラメータは、SGAのラージ・プール・コンポーネントのサイズを指定または調整できる動的パラメータです。 - Javaプール・サイズの指定
JAVA_POOL_SIZE
初期化パラメータは、SGAのJavaプール・コンポーネントのサイズを指定または調整できる動的パラメータです。 - Streamsプール・サイズの指定
STREAMS_POOL_SIZE
初期化パラメータは、SGAのStreamsプール・コンポーネントのサイズを指定または調整できる動的パラメータです。 - 結果キャッシュの最大サイズの指定
RESULT_CACHE_MAX_SIZE
初期化パラメータは、SGAの結果キャッシュ・コンポーネントの最大サイズを指定できる動的なパラメータです。 - その他のSGA初期化パラメータの指定
いくつかの追加の初期化パラメータを設定して、SGAのメモリーの使用方法を制御できます。
親トピック: メモリーの手動構成
6.4.3.1 手動共有メモリー管理について
自動メモリー管理または自動共有メモリー管理を使用しない場合は、いくつかのSGAコンポーネントのサイズを手動で構成し、データベース・ワークロードの変更に基づいてこれらのサイズを監視およびチューニングする必要があります。これらのSGAコンポーネントのサイズを制御するパラメータの設定のガイドラインに従うことができます。
DBCAを使用してデータベースを作成し、手動共有メモリー管理を選択した場合、バッファ・キャッシュ、共有プール、ラージ・プールおよびJavaプールのサイズを入力する必須フィールドがDBCAで表示されます。次に、対応する初期化パラメータが、作成されるサーバー・パラメータ・ファイル(SPFILE
)に設定されます。かわりにデータベースをCREATE DATABASE
SQL文とテキスト初期化パラメータ・ファイルで作成した場合、次のいずれかを実行します。
-
SGAコンポーネント・サイズを設定する初期化パラメータの値を指定します。
-
テキスト形式の初期化ファイルからSGAコンポーネント・サイズのパラメータを削除します。サイズを設定していないコンポーネントに対しては、Oracle Databaseによって適切なデフォルトが選択されます。
親トピック: 手動共有メモリー管理の使用
6.4.3.2 手動共有メモリー管理を使用可能にする方法
手動共有メモリー管理自体を使用可能にする初期化パラメータはありません。自動メモリー管理と自動共有メモリー管理の両方を使用禁止にすることによって、手動共有メモリー管理が事実上使用可能になります。
手動共有メモリー管理を使用可能にするには:
MEMORY_TARGET
初期化パラメータを0(ゼロ)に設定します。SGA_TARGET
初期化パラメータを0(ゼロ)に設定します。
次に、以降の項の説明に従って、様々なSGAコンポーネントの値を設定する必要があります。
親トピック: 手動共有メモリー管理の使用
6.4.3.3 バッファ・キャッシュ初期化パラメータの設定
SGAコンポーネントであるバッファ・キャッシュのサイズは、バッファ・キャッシュ初期化パラメータによって決まります。
これらのパラメータを使用して、データベースで使用される各ブロック・サイズのキャッシュ・サイズを指定します。これらの初期化パラメータはすべて動的です。
バッファ・キャッシュのサイズはパフォーマンスに影響を及ぼします。一般に、キャッシュ・サイズを大きくすると、ディスクの読取りと書込みの回数が少なくなります。ただし、キャッシュを大きくすると、メモリーを過度に消費してページングやスワッピングが発生する可能性があります。
Oracle Databaseでは、データベース内で複数のブロック・サイズがサポートされます。非標準のブロック・サイズを設定した表領域を作成する場合は、これらの表領域を格納するための非標準のブロック・サイズ・バッファを構成する必要があります。SYSTEM
表領域には標準のブロック・サイズが使用されます。標準のブロック・サイズを指定するには、初期化パラメータDB_BLOCK_SIZE
を設定します。指定できる値は2Kから32Kです。
データベースで複数のブロック・サイズを使用する場合は、DB_CACHE_SIZE
と、少なくとも1つのDB_
n
K_CACHE_SIZE
パラメータを設定する必要があります。Oracle Databaseは、DB_CACHE_SIZE
パラメータに適切なデフォルト値を割り当てますが、DB_
n
K_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_
n
K_CACHE_SIZE
パラメータを使用して、標準ブロック・サイズのキャッシュ・サイズを指定することはできません。DB_BLOCK_SIZE
の値がnKBの場合にDB_
n
K_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_SIZE
とDB_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よりも前のリリースから移行する場合、移行ユーティリティにより、このパラメータの新しい値が、アップグレード前の環境での内部SGAオーバーヘッド値とこのパラメータの以前の値に基づいて推奨されます。Oracle Database 10g以降では、SGAの内部オーバーヘッド(共有プールの起動オーバーヘッドとも呼ばれます)の正確な値をV$SGAINFO
ビューから問い合せることができます。また、手動共有メモリー管理モードでは、ユーザーが指定したSHARED_POOL_SIZE
値が内部SGAのオーバーヘッドの要件も満たせないほど小さい場合は、Oracle Databaseの起動時にORA-00371
エラーが生成され、SHARED_POOL_SIZE
パラメータの推奨値が示されます。自動共有メモリー管理を使用している場合は、共有プールが自動的に調整され、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プールに転送されます。
親トピック: 手動共有メモリー管理の使用
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のメモリー使用方法を制御できます。
- 物理メモリー
LOCK_SGA
パラメータをTRUE
に設定すると、SGA全体が物理メモリーにロックされます。 - SGA開始アドレス
SHARED_MEMORY_ADDRESS
パラメータとHI_SHARED_MEMORY_ADDRESS
は、実行時にSGAの開始アドレスを指定します。
親トピック: 手動共有メモリー管理の使用
6.4.3.9.1 物理メモリー
LOCK_SGA
パラメータをTRUE
に設定すると、SGA全体が物理メモリーにロックされます。
このパラメータは自動メモリー管理では使用できません。
関連項目:
-
これらの初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
親トピック: その他のSGA初期化パラメータの指定
6.4.3.9.2 SGA開始アドレス
SHARED_MEMORY_ADDRESS
パラメータとHI_SHARED_MEMORY_ADDRESS
パラメータでは、実行時のSGAの開始アドレスが指定されます。
これらのパラメータはほとんど使用されません。64ビットのプラットフォームの場合、HI_SHARED_MEMORY_ADDRESS
では、64ビット・アドレスの上位32ビットが指定されます。
関連項目:
-
SHARED_MEMORY_ADDRESS
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
HI_SHARED_MEMORY_ADDRESS
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
親トピック: その他のSGA初期化パラメータの指定
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_SIZE
、HASH_AREA_SIZE
、BITMAP_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_POLICY
がAUTO
に設定されている場合、*_AREA_SIZE
パラメータの設定は無視されます。
親トピック: メモリーの手動構成
6.5 強制フル・データベース・キャッシュ・モードの使用方法
Oracle Databaseインスタンスは、データベース全体をバッファ・キャッシュにキャッシュできます。
ノート:
この機能は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。
- 強制フル・データベース・キャッシュ・モードについて
デフォルト・キャッシュ・モードでは、ユーザーが大きな表の問合せを行うとき、バッファ・キャッシュからより多くの有用なデータが削除される可能性があるため、Oracle Databaseは基礎となるデータを必ずしもキャッシュしません。Oracle Database 12cリリース1 (12.1.0.2)以上では、データベース全体をバッファ・キャッシュにキャッシュするのに十分な領域があり、そうすることが有益であるとOracle Databaseインスタンスが判断した場合、インスタンスはデータベース全体をバッファ・キャッシュに自動的にキャッシュします。 - 強制フル・データベース・キャッシュ・モードを有効にする前に
データベース・インスタンスに対して強制フル・データベース・キャッシュ・モードを有効にするには、データベースは12.0.0以上の互換性レベルである必要があります。また、バッファ・キャッシュは必ずデータベース全体をキャッシュするのに十分な大きさにします。 - 強制フル・データベース・キャッシュ・モードの有効化
データベースの強制フル・データベース・キャッシュ・モードを有効にすることができます。 - 強制フル・データベース・キャッシュ・モードの無効化
データベースの強制フル・データベース・キャッシュ・モードを無効にすることができます。
親トピック: メモリーの管理
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)全体に適用されます。
-
強制フル・データベース・キャッシュ・モードに関する情報は、制御ファイルに格納されます。制御ファイルを置換または再作成すると、強制フル・データベース・キャッシュ・モードに関する情報は失われます。復元された制御ファイルにこの情報が含まれるかどうかは、制御ファイルをバックアップした時期によって決まります。
関連項目:
-
強制フル・データベース・キャッシュ・モードを使用する場合の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
親トピック: 強制フル・データベース・キャッシュ・モードの使用方法
6.5.2 強制フル・データベース・キャッシュ・モードを有効にする前に
データベース・インスタンスに対して強制フル・データベース・キャッシュ・モードを有効にするには、データベースは12.0.0以上の互換性レベルである必要があります。また、バッファ・キャッシュは必ずデータベース全体をキャッシュするのに十分な大きさにします。
自動メモリー管理にSGA_TARGET
またはMEMORY_TARGET
初期化パラメータを使用するようにデータベースを構成する場合、バッファ・キャッシュのサイズはワークロードによって変わります。インスタンスが通常のワークロード下にあるときに、次の問合せを実行してバッファ・キャッシュ・サイズを見積ります。
SELECT NAME, BYTES FROM V$SGAINFO WHERE NAME='Buffer Cache Size';
この問合せは、あらゆる使用可能なブロック・サイズについてバッファ・キャッシュ・サイズを返します。データベースで複数のブロック・サイズを使用している場合、使用可能な各ブロック・サイズのバッファ・キャッシュ・サイズはそのブロック・サイズの合計データベース・サイズより大きくなるようにするのが最適です。
DB_
n
K_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 強制フル・データベース・キャッシュ・モードの有効化
データベースの強制フル・データベース・キャッシュ・モードを有効にすることができます。
親トピック: 強制フル・データベース・キャッシュ・モードの使用方法
6.5.4 強制フル・データベース・キャッシュ・モードの無効化
データベースの強制フル・データベース・キャッシュ・モードを無効にすることができます。
親トピック: 強制フル・データベース・キャッシュ・モードの使用方法
6.6 Database Smart Flash Cacheの構成
データベース・スマート・フラッシュ・キャッシュ機能は、ソリッド・ステート・デバイス(SSD)テクノロジを使用してデータベース・バッファ・キャッシュを透過的に拡張します。Database Smart Flash Cacheにより、ディスクI/O量が削除され、同等サイズのRAMを追加するより低いコストでOracleデータベースのパフォーマンスを大幅に向上させることができます。
- Database Smart Flash Cacheを構成する場合
いくつかの条件が満たされた場合は、データベース・スマート・フラッシュ・キャッシュの構成を検討する必要があります。 - Database Smart Flash Cacheのサイズの設定
一般的に、データベース・スマート・フラッシュ・キャッシュのサイズは、バッファ・キャッシュのサイズの2から10倍に設定します。 - Database Smart Flash Cacheのメモリーのチューニング
バッファ・キャッシュからデータベース・スマート・フラッシュ・キャッシュに移動される各データベース・ブロックにつき、そのブロックに関する少量のメタデータがバッファ・キャッシュに保持されます。 - Database Smart Flash Cacheの初期化パラメータ
データベース・スマート・フラッシュ・キャッシュを構成するために、初期化パラメータのセットを使用できます。 - Oracle Real Application Clusters環境のDatabase Smart Flash Cache
Oracle Real Application Clusters環境では、すべてのインスタンスにデータベース・スマート・フラッシュ・キャッシュを構成するか、どのインスタンスにも構成しないことをお薦めします。また、各インスタンスに構成されたフラッシュ・キャッシュの合計サイズはだいたい同じである必要があります。
関連項目:
データベース・スマート・フラッシュ・キャッシュについては「メモリー・アーキテクチャの概要」
親トピック: メモリーの管理
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を使用することによって相殺できます。
-
データベース・スマート・フラッシュ・キャッシュをフラッシュするには、
ALTER SYSTEM FLUSH FLASH_CACHE
文を発行します。データベース・スマート・フラッシュ・キャッシュのフラッシュは、リライトされた問合せ、または同一の開始点からの一連の問合せのパフォーマンスを測定する必要がある場合、またはキャッシュが破損している可能性がある場合に有効です。
関連項目:
6.6.4 Database Smart Flash Cacheの初期化パラメータ
データベース・スマート・フラッシュ・キャッシュを構成するために、初期化パラメータのセットを使用できます。
表6-4 Database Smart Flash Cacheの初期化パラメータ
パラメータ | 説明 |
---|---|
|
Database Smart Flash Cacheが含まれるファイルのパスおよびファイル名のリストを、オペレーティング・システムのファイル・システムまたはOracle Automatic Storage Managementディスク・グループ内で指定します。指定されたファイルが存在しない場合は、起動時にデータベースによって作成されます。各ファイルはフラッシュ・デバイスに常駐する必要があります。Database Smart Flash Cacheをディスク・ドライブ(スピンドル)に構成すると、パフォーマンスが低下する可能性があります。最大で16個のファイルがサポートされます。 |
|
Database Smart Flash Cache内の各ファイルのサイズを指定します。各サイズは、 サイズ指定は、そのフラッシュ・デバイスの物理メモリー・サイズ以下である必要があります。サイズは、nGというように、ギガバイト(GB)数で示します。たとえば、16GBのDatabase Smart Flash Cacheを指定するには、 |
たとえば、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.7 Oracle Database In-Memoryによる問合せパフォーマンスの向上
Oracle Database In-Memory (Database In-Memory)は、Oracle Database 12cリリース1 (12.1.0.2)に最初に導入された一連の機能であり、リアルタイム分析および混合ワークロードのパフォーマンスを大幅に改善します。
Database In-Memoryの機能により、次の操作を実行する問合せのパフォーマンスが大幅に向上します。
-
大量の行のスキャンと
<
、>
、=
、IN
などの演算子を使用するフィルタの適用 -
100列のうち5列にアクセスする問合せなど、大量に列がある表またはマテリアライズド・ビューからの少数の列の選択
-
SQL演算子を使用したLOB列の選択
-
大きなファクト表と小さなディメンション表の結合
-
データの集計
Database In-Memory機能セットには、インメモリー列ストア(IM列ストア)、高度な問合せ最適化、および可用性ソリューションが含まれています。
-
IM列ストア
IM列ストアは、Database In-Memoryの主要機能です。IM列ストアでは、表、パーティションおよび個別の列のコピーが、高速スキャン向けに最適化された、特別な圧縮列形式で保持されます。IM列ストアは、システム・グローバル領域(SGA)のオプション部分である、インメモリー領域に存在します。
IM列ストアは行ベース・ストレージまたはデータベース・バッファ・キャッシュに代わるものではありませんが、それを補完します。データベースでは、行ベースおよび列形式の両方でメモリー内にデータを格納できるようになり、両方の長所が提供されます。IM列ストアにより、ディスク形式とは無関係な、トランザクションの一貫性がある、表データのコピーがさらに提供されます。
-
高度な問合せ最適化
Database In-Memoryには、分析問合せのためのいくつかのパフォーマンス最適化が含まれています。
-
インメモリー式(IM式): IM列ストアでホットな式の特定と移入が可能です。
-
結合グループ: 列値の解凍およびハッシュ化にかかわるパフォーマンスのオーバーヘッドを排除できます。
-
インメモリー集計(IM集計): 大きなファクト表と小さなディメンション表を結合する集計問合せのパフォーマンスが向上します。
-
再移入: 変更されたオブジェクトをIM列ストアに自動的に再移入することで、問合せのパフォーマンスが向上します。
-
インメモリー動的スキャン(IM動的スキャン): CPUリソースがアイドル状態のときに軽量スレッドを使用して自動的に表スキャンをパラレル化することで、問合せのパフォーマンスが向上します。
-
-
高可用性のサポート
Database In-Memoryには、次の可用性機能が組み込まれています。
-
データベース・インスタンス再起動時のIM列ストアへのデータ移入時間を短縮します。この機能は、インメモリー・ファスト・スタート(IMファスト・スタート)機能を使用して実現されます。
-
Oracle Real Application Clusters (Oracle RAC)環境の各ノードでIM列ストアを提供します。
-
Active Data Guard環境のスタンバイ・データベースでIM列ストアを提供します。
-
ノート:
デフォルトでは、Oracle Database In-MemoryはOracleデータベースでは無効になっています。INMEMORY_SIZE
初期化パラメータを0より大きい値に設定することで有効にできます。Oracle Database In-Memoryが有効になっている場合、Oracle Database Resource Manager(リソース・マネージャ)も自動的に有効になります。
6.8 Memoptimized Rowstoreを使用する高パフォーマンス・データ・ストリーミングの有効化
Memoptimized Rowstoreでは、IoT (モノのインターネット)アプリケーションなど、アプリケーションでの高パフォーマンス・データ・ストリーミングが可能になります。この機能は、通常は、同時に多数のクライアントから単一行挿入で少量のデータをストリーミングし、また、非常に高い頻度でクライアントに対してデータを問い合せます。
Memoptimized Rowstoreには、次の機能があります。
-
高速インジェスト
高速インジェストでは、データベースへの頻度の高い単一行データ挿入の処理が最適化されます。高速インジェストでは、データ挿入のパフォーマンスが向上するように、ディスク書込み前の挿入のバッファリングにラージ・プールが使用されます。
-
高速参照
高速参照では、頻度の高い問合せでデータベースからデータを高速に取得できます。高速参照では、問合せのパフォーマンスが向上するように、表から問い合せたデータのバッファリングに、memoptimizeプールというSGA内の別個のメモリー領域が使用されます。
ノート:
高速参照を使用する場合は、
MEMOPTIMIZE_POOL_SIZE
初期化パラメータを使用して、適切なメモリー・サイズをmemoptimizeプールに割り当てる必要があります。
関連項目:
-
Memoptimized Rowstoreの構成と使用の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください
-
memoptimizeプールのメモリー・アーキテクチャの詳細は、『Oracle Database概要』を参照してください
-
MEMOPTIMIZE_POOL_SIZE
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください
親トピック: メモリーの管理
6.9 メモリー管理の参考情報
自動メモリー管理は、一部のプラットフォームでのみサポートされています。また、メモリー管理に関する情報について一連のデータ・ディクショナリ・ビューを問い合せることができます。
- 自動メモリー管理をサポートするプラットフォーム
自動メモリー管理は、いくつかのプラットフォームでサポートされています。 - メモリー管理のデータ・ディクショナリ・ビュー
動的パフォーマンス・ビューのセットがメモリー管理の情報を提供します。
親トピック: メモリーの管理
6.9.1 自動メモリー管理をサポートするプラットフォーム
いくつかのプラットフォームで、自動メモリー管理がサポートされます。
次のプラットフォームでは自動メモリー管理がサポートされます。自動メモリー管理は、SGAおよびPGAのサイズを自動的にチューニングするOracle Databaseの機能で、パフォーマンスを最適化するために、要求に応じてメモリーが領域間で再配分されます。
-
Linux
-
Solaris
-
Windows
-
HP-UX
-
AIX
親トピック: メモリー管理の参考情報
6.9.2 メモリー管理のデータ・ディクショナリ・ビュー
動的パフォーマンス・ビューのセットがメモリー管理の情報を提供します。
ビュー | 説明 |
---|---|
システム・グローバル領域(SGA)に関する要約情報が表示されます。 |
|
様々なSGAコンポーネントのサイズ、グラニュル・サイズおよび空きメモリーなど、SGAに関するサイズ情報が表示されます。 |
|
共有プール、ラージ・プール、JavaプールおよびStreamsプール内に割り当てられているメモリーの量に関する詳細情報が表示されます。 |
|
PGAメモリー使用統計と、自動PGAメモリー・マネージャが使用可能な場合( |
|
自動調整された静的なすべてのメモリー・コンポーネントの現在のサイズに関する情報と、各コンポーネントで発生した最後の操作(たとえば、拡大または縮小)が表示されます。 |
|
すべてのSGAコンポーネントの現在のサイズと各コンポーネントの最後の操作が表示されます。 |
|
将来の動的なSGAサイズ変更操作に使用可能なSGAメモリーの容量に関する情報が表示されます。 |
|
現在進行中のサイズ変更操作に関する情報が表示されます。サイズ変更の操作は、SGA、インスタンスPGAまたは動的なSGAコンポーネントの拡大または縮小です。 |
|
現在進行中の動的SGAコンポーネントのサイズ変更操作に関する情報が表示されます。 |
|
|
|
最後に完了した800件のSGAコンポーネント・サイズ変更操作に関する情報が表示されます。 |
|
自動メモリー管理を使用可能にした場合、 |
|
|
|
|
|
IM列ストア内のすべてのセグメントに割り当てられている記憶域に関する情報が表示されます。 ノート: このビューは、Oracle Database 12cリリース1 (12.1.0.2)以上で使用できます。 |
親トピック: メモリー管理の参考情報