この項では、Oracle Database Express Editionのメモリー管理に関するバックグラウンド情報を提供し、メモリーの割当てを調整する方法について説明します。
この付録は、次の項で構成されています。
Oracle Database XEでは自動メモリー管理が使用され、これは無効にできません。Oracle Database XEの自動メモリー管理により、処理の要求を満たすために必要に応じて、システム・グローバル領域(SGA)とインスタンスのプログラム・グローバル領域(PGA)の間でメモリーは動的に交換されます。また、個々のSGAコンポーネントのサイズと個々のPGAのサイズも動的にチューニングされます。
Oracle Databaseのメモリー管理の概要(SGAおよびPGAなど)については、「メモリー管理について」を参照してください。
この項では、Oracle Database Express Edition (Oracle Database XE)のメモリー管理に関するバックグラウンド情報を提供します。次のトピックが含まれています。
データベースの操作をサポートするために、Oracle Database XEは、バックグラウンド・プロセスと呼ばれる一連のプロセスを開始し、ホスト・コンピュータの一部のメモリーを割り当てる必要があります。バックグラウンド・プロセスと割り当てられたメモリーがともに、1つのOracleインスタンスを構成します。
Oracleインスタンスによって割り当てられるメモリーには、次の2つのタイプがあります。
システム・グローバル領域(SGA): インスタンスのデータ・バッファおよび制御情報が含まれる共有メモリー領域。SGAは、別々のバッファ領域およびデータ・プールに分割されます。これらについては、「SGAコンポーネント」で説明します。
プログラム・グローバル領域(PGA): 単一のOracleサーバー・プロセスで使用されるメモリー領域。Oracleサーバー・プロセスは、クライアントの要求に対するサービスを提供するプロセスです。Oracle Database XEは、新しいデータベース接続要求を受信するたびに新しいサーバー・プロセスを作成します。その後に、新しい各サーバー・プロセスは、自分専用のPGA領域を割り当てます。PGAは、SQL文を処理し、ログオンその他のセッション情報を保持するために使用されます。
図5-1に、Oracle Database XEのメモリー割当てを示します。
SGAおよびPGAに割り当てられたメモリー容量は、データベースのパフォーマンスに直接影響します。SGAおよびPGAのサイズは、Oracle Database XEをインストールしたときに自動的に構成されます。それらを変更するタイミングについては、「SGAおよびPGAのサイズ」を参照してください。
SGAに含まれるいくつかのコンポーネントは次の表のとおりです。Oracle Database XEでは、これらのコンポーネントの個々のサイズは、最適なパフォーマンスになるように自動的にチューニングされます。
コンポーネント | 説明 |
---|---|
バッファ・キャッシュ | バッファ・キャッシュは、問合せまたは変更が行われたデータを格納するバッファとしての機能を果たすSGAのコンポーネントです。データベースに接続されているすべてのクライアントでバッファ・キャッシュへのアクセスを共有します。バッファ・キャッシュにより、物理ディスクからのアクセスの繰返しという時間がかかる操作を防止できます。 |
共有プール | 共有プールには、ユーザー間で共有可能な、操作に関する情報およびコードがキャッシュされます。次に例を示します。
|
REDOログ・バッファ | REDOログ・バッファは、ディスクに保存されている物理REDOログ・ファイルに、より適切なタイミングで一度にREDO情報を書き込めるようになるまで、(インスタンス・リカバリに使用された)REDO情報をキャッシュしてパフォーマンスを改善します。REDO情報とREDOログ・ファイルの詳細は、「オンラインREDOログ・ファイル」を参照してください。 |
ラージ・プール | ラージ・プールはオプションの領域で、様々なサーバー・プロセスの大きいI/O要求をバッファするために使用されます。 |
注意: Oracle Database XEでは自動メモリー管理が使用され、通常、リソースおよび処理負荷に基づいて最適なメモリー構成が提供されます。メモリー関連のパラメータは、その結果を完全に理解していないかぎり、設定を行わないでください。メモリー関連のパラメータ値を変更した場合は、その変更を本番環境に実装する前に、十分なテストを行ってください。 |
SGAおよびPGAのデフォルト・サイズは、インストール時に、システムの物理メモリーの総容量に基づいて設定されます。個々のSGAコンポーネントのサイズを変更するかわりに、SGAターゲットと呼ばれるパラメータを設定してSGAの全体サイズを変更できるため、個々のSGAコンポーネントのサイズが自動的に調整され、最適なパフォーマンスになるようにこれらのサイズが継続的にチューニングされます。同様に、個々のPGAのサイズを変更するかわりに、PGAの集合に割り当てられるメモリーの総容量を変更できるため、個々のPGAサイズが必要に応じて調整されます。PGAの集合は、PGA総計と呼ばれます。PGA総計の最大サイズを変更するには、PGA総計ターゲットと呼ばれるパラメータを設定します。
注意: Oracle Database XEでは、常に、SGAターゲットのパラメータで指定されたメモリーの総容量が割り当てられます。つまり、現在のSGAサイズは、常にSGAターゲットと等しくなります。これに対して、PGA総計の現在のサイズは、PGA総計ターゲットのパラメータで指定された容量よりも少なくなることがあります。PGA総計には、必要に応じてより多くのメモリーが(PGA総計ターゲットで指定された最大値まで)割り当てられます。 |
Oracle Database XEで、SGAおよびPGA総計に許可されている最大メモリー容量は、1ギガバイト(GB)です。SGAサイズとPGA総計サイズの合計が1 GBを超えるようにメモリー割当てを変更しようとすると、Oracle Database XEによりエラー・メッセージが出力されます。(SGAの変更については、データベースを再起動するまで、エラー・メッセージは表示されません。)
SGAおよびPGA総計サイズの変更が必要となるのは、次の状況のみです。
Oracle Database XEを実行するコンピュータに物理メモリーを追加したので、データベースへの割当てを増やします。
この場合は、SGAとPGA総計の両方のサイズを増やし、SGAサイズのPGA総計サイズに対する元の比率をおおよそ維持するようにします。
エラー・メッセージで、SGAコンポーネントのメモリー不足が示されている場合は、SGAサイズを増やします。そのようなエラーの例を次に示します。
ORA-04031: unable to allocate n bytes of shared memory
ORA-00379: no free buffers available in buffer pool...
エラー・メッセージで、プロセスのメモリー不足が示されている場合は、PGA総計サイズを増やします。そのようなエラーの例を次に示します。
ORA-04030: out of process memory when trying to allocate n bytes
メモリー不足のエラーがSGAとPGAのどちらに関係しているかわからない場合は、SGAとPGA総計の両方のサイズを増やし、SGAサイズのPGA総計サイズに対する元の比率をおおよそ維持するようにします。
SGAサイズの変更の場合、変更を有効にするには、データベースを停止して再起動する必要があります。PGA総計サイズの変更の場合は、データベースを再起動する必要はありません。
この例は上級ユーザー向けです。ユーザーが、Oracle Database XEのデフォルトのメモリー管理を変更する適切な決定を行うための十分な知識を持っていて、変更を本番環境に実装する前に十分なテストを行うことを前提としています。
たとえば、Oracle Database Express Edition (Oracle Database XE)を実行するコンピュータをアップグレードして、1ギガバイト(GB)以上のシステム・メモリーを追加した直後に、データベース用のメモリーを250 MB増やす場合を考えます。この250 MBのうち、200 MBをSGAに、50 MBをPGA総計に追加します。
これを行うために、次に示すように、SQL DeveloperのDBAナビゲータを使用して、SGA_TARGETおよびPGA_AGGREGATE TARGETの初期化パラメータの現在の値を確認し、ALTER SYSTEMコマンドを使用して、これらのパラメータの値を再設定できます。
SQL Developerで、「表示」、「DBA」の順にクリックして、「DBA」ナビゲータを表示します。
該当のナビゲータにSYSTEM
ユーザーへの接続が存在しない場合は、「接続」ノードをクリックして「接続の追加」を選択し、SYSTEM
アカウントの接続を追加するアクションを完了して、接続を追加します。
「DBA」ナビゲータで、「SYSTEM
」接続を展開し、「データベース構成」を展開して、「初期化パラメータ」をクリックします。
pga_aggregate_target
およびsga_target
の現在の値をメモし、任意の新しい値を計算します。この例では、任意の新しい値は、pga_aggregate_target
が140 MB、sga_target
が472 MBであるとします。
「接続」ナビゲータで、「SYSTEM
」接続を選択し、さらにその接続のSQLワークシートがまだ開かれていない場合は、「SYSTEM
」を右クリックして「SQLワークシートを開く」を選択します。
SYSTEM
接続のSQLワークシートで、次のコマンドラインを入力します。
ALTER SYSTEM SET pga_aggregate_target = 140 M; ALTER SYSTEM SET sga_target = 472 M;
SYSTEM
接続のSQLワークシートで、「スクリプトの実行」アイコンをクリックして、これらの文を実行します。
都合のよい次の機会に、データベースを停止して再起動し、SGAサイズの変更を有効にします。