Oracle の初期化パラメータ

ArcSDE を実行するために、Oracle インスタンスのデフォルト設定を変更する必要はありません。ただし、大規模なシステムでは、Oracle インスタンスの設定をいくつか変更する必要があります。

Oracle インスタンスを起動するたびに、Oracle は init.ora ファイルまたは spfile.ora サーバ パラメータ ファイルから初期化パラメータを読み取ります。これらのファイルはどちらもインスタンスの特性を定義しますが、管理方法は異なります。

init.ora ファイルは、ORACLE_BASE/admin/<ORACLE_SID>/pfile ディレクトリ(またはフォルダ)にあります。一般に、Oracle データベース インスタンスの初期化ファイルに与えられる名前は init.ora ですが、実際には特定のインスタンスのファイル名は init<ORACLE_SID>.ora になります。たとえば、Oracle システム ID(SID)が GIS である場合、このインスタンスの init.ora ファイルは initGIS.ora となります。

ALTER SYSTEM コマンドを使用してパラメータを変更すると、インスタンスがサーバ パラメータ ファイルから起動された場合は、変更がサーバ パラメータ ファイルに自動的に反映されます。init.ora ファイルを使用してインスタンスを起動した場合に、システム パラメータの変更を現在のデータベース インスタンスのみではなくその後も反映させるには、テキスト エディタを使用してファイルを手動で編集する必要があります。

共有メモリに影響を与えるパラメータ

このセクションでは、共有メモリの割り当てを制御するパラメータについて説明します。Oracle の初期化パラメータの詳細については、使用しているバージョンの『Oracle Database パフォーマンス チューニング ガイド』をご参照ください。

OPEN_CURSORS

OPEN_CURSORS 初期化パラメータは、1 つのセッションで一度に開くことのできるカーソルの数を指定します。デフォルト値は 300 です。セッションで新しいカーソルを開く際に、すでに最大数のカーソルを開いていた場合は、Oracle Error -1000 が返されます。ArcSDE では、パフォーマンスを向上させるために、頻繁に実行されるカーソルを開いたままにします。OPEN_CURSORS パラメータが十分に大きな値に設定されていないと、上記のエラーが発生します。Oracle のドキュメントによれば、パラメータを大きな値に設定しても、悪影響は何もありません。したがって、非常に大きな値(2,000 など)を設定することができます。これにより、実用の点では開いたカーソルの数が制限されなくなる一方で、膨大な量のカーソル リソースを消費しようとする不正プロセスに対する防御手段は引き続き提供されます。セッションで開かれるカーソルの予想数を計算したい場合は、組織のデータ モデルに基づき、次の式をガイドラインとして使用することができます。

  • 各種の ArcSDE データ管理カーソル(20)+
  • 各種の匿名 PL/SQL ブロック(20)+
  • 空間クエリ(レイヤにつき 6)+
  • ログ ファイル クエリ(11)+
  • マルチバージョン対応のテーブルの編集時に使用する各種クエリ(マルチバージョン対応のテーブルまたはレイヤにつき 12)

したがって、ArcMap アプリケーションがドキュメントで 10 個のレイヤを編集する場合は、231 個のカーソル(20 + 20 + 60 + 11 + 120 = 231)が開く計算になります。カーソルが頻繁に不足する場合は、OPEN_CURSORS パラメータの値を 50 または 100 の単位で増やしてみてください。

メモメモ:

Oracle 10g は、インスタンスで開かれたカーソルの数が 1,200 を超えた時点で、サーバ アラートを生成するようにあらかじめ設定されています。1,200 個のカーソルを開くことはジオデータベースでは珍しくないため、このアラートの閾値を引き上げて、アラート キューの無駄な警告を削除することができます。

このパラメータの値を下げなければならない状況の 1 つとして、Oracle インスタンスを実行しているサーバ上のメモリ リソースが不十分なために、各 Oracle 専用プロセスに十分なメモリを割り当てられない場合があります。専用プロセスのメモリ要件のサイズを取得するには、アプリケーションのプロトタイプを作成する必要があります。プロセスのメモリ要件は、複数の Oracle パラメータとアプリケーションの振舞い(SQL ステートメントなど)に左右される可能性があります。

SESSION_CACHED_CURSORS

Oracle は、各セッションで送信される SQL ステートメントを監視します。同じステートメントが複数回送信されたことを検出した場合は、そのステートメントをカーソル キャッシュへ移動し、再利用できるようにカーソルを開いたままにします。SESSION_CACHED_CURSORS パラメータは、カーソル キャッシュに配置できるカーソルの数を制御します。SESSION_CACHED_CURSORS パラメータのデフォルト値は、Oracle のリリースによって異なります。インスタンスのカーソル キャッシュのカーソル数が 50 未満に設定されている場合は、このパラメータの値を 50 に増やしてください。

UNDO_MANAGEMENT および UNDO_TABLESPACE

Oracle は、現在ユーザが変更しているデータのコピーを複数格納します。データを変更するトランザクションの実行中、元のデータのコピーは、他のセッションで一貫したデータベースの読み取りを実現するために使用されます。さらに、変更ユーザが ROLLBACK ステートメントを発行して変更内容を元に戻すことを選択するか、ユーザのプロセスがトランザクションの途中でクラッシュした場合、Oracle は作業内容を元に戻して、データベースを一貫した状態に復元する必要があります。

こうした状況をすべてサポートするために、Oracle は編集前のデータを特別なデータ構造(UNDO または ROLLBACK セグメント)に格納します。UNDO_MANAGEMENT または UNDO_TABLESPACE パラメータを設定すると、Oracle が UNDO セグメントを自動的に作成して管理するようになります。UNDO 管理を自動化するには、まず、UNDO_MANAGEMENT パラメータを auto に設定します。次に、UNDO_TABLESPACE パラメータをシステム管理の UNDO セグメントが格納される表領域の名前に設定します。

システム管理の UNDO セグメントの格納に任意の表領域を使用できないことに注意してください。そのための表領域は、作成時に UNDO 表領域として指定する必要があります。自動的な UNDO の監視と管理の詳細については、『Oracle Database 管理者ガイド』をご参照ください。

SESSIONS

ArcSDE は、オペレーティング システムに応じて、デフォルトでは 48 または 64 の同時接続を許可するように設定されます。SDE.SERVER_CONFIG データ ディクショナリ テーブルで大量の接続を許可する場合は、新しい設定に合わせて SESSIONS パラメータを変更する必要があります。

SESSIONS パラメータは、Oracle が許可する同時セッションの合計数を直接制限します。デフォルト設定では予想される数の ArcSDE 接続をサポートできない場合は、このパラメータに対して、現在予想される接続の数に(Oracle の内部関数をサポートするために)少なくとも 10% 上乗せした値を設定してください。

メモメモ:

Oracle Shared Server 設定を使用する場合、SHARED_SERVER_SESSIONS パラメータは、共有サーバ接続にのみ適用されることを除いて、上記の SESSIONS パラメータと同様の役割を果たします。ただし、すべてのセッション(共有サーバ接続および専用サーバ接続)は、SESSIONS パラメータによって制限されます。

PROCESSES

Oracle が生成できるプロセスの最大数を PROCESSES パラメータで制限することもできます。専用サーバ接続設定を使用する場合、このプロセスはデータベースがサポートする同時セッションの数にほぼ一致します。ArcSDE が許可する接続の数を増やす場合は、PROCESSES パラメータを、少なくとも ArcSDE 接続の数に一般的な Oracle バックグラウンド プロセスの数である 25 を足した値に設定してください。

Oracle の統計情報に影響するパラメータ

OPTIMIZER_MODE

OPTIMIZER_MODE パラメータの値はデフォルトのままにしてください。Oracle 10g および 11g のデフォルト値は all_rows です。この設定はほとんどのジオデータベースに最適であり、ジオデータベースの全体的なスケーラビリティを向上させます。

メモリに影響を与えるパラメータ

メモリに影響を与える初期化パラメータを設定する場合には注意が必要です。ホスト コンピュータの物理メモリ リソースの限界を超えるパラメータを設定すると、パフォーマンスが著しく低下します。

LOG_BUFFER

ログ バッファは、Oracle SGA(System Global Area)のコンポーネントです。SGA は、Oracle のバックグラウンド プロセスがデータベースへのコミットされていない変更内容をディスク上の格納領域に書き込めるようになるまで、それらをメモリ上に保持します。これらの書き込みは頻繁に(少なくとも 3 秒おきに)発生するので、ログ バッファに大きな領域を割り当てる必要はなく、1MB 未満のサイズに設定することができます。REDO ログ バッファのサイズは、LOG_BUFFER パラメータによって制御されます。ログ バッファのデフォルト サイズは、ほとんどのジオデータベースに適しています。ただし、書き込み操作が頻繁に行われるデータベースでは、複数のユーザがログ バッファに同時にアクセスしようとして、パフォーマンスが低下することがあります。この状況を診断して緩和するには、ラッチ(回路)や待機イベントの監視など、高度なテクニックが要求されます。詳細については、『Oracle Database パフォーマンス チューニング ガイド』と MetaLink Knowledge Base をご参照ください。

メモメモ:

大量のデータを読み込むトランザクションを処理するために LOG_BUFFER に大きな値を設定すると、実際にはパフォーマンスが低下することがあります。ログ バッファが大きすぎるために、トランザクション間でラッチ競合が発生することもあります。

SHARED_POOL_SIZE

共有プールも Oracle SGA のコンポーネントの 1 つであり、データ ディクショナリ キャッシュとライブラリ キャッシュの両方を保持します。データ ディクショナリ キャッシュには、データ オブジェクト、空き領域、権限などに関する情報が格納されます。ライブラリ キャッシュには、最近解析された SQL ステートメントが格納されます。一般に、共有プールのサイズがライブラリ キャッシュのリソース要件を満たすのに十分であれば、データ ディクショナリ キャッシュを保持するのにも十分です。ArcGIS ジオデータベースでは、他の Oracle アプリケーションより大きな共有プールを使用することによる効果が期待できます。ArcSDE は、クライアント アプリケーションから送信された SQL ステートメントのキャッシュをメモリ上に保持します。共有プールを大きくすると、より多くのカーソルを開いたままにすることができるため、カーソル管理操作が削減され、パフォーマンスが向上します。共有プールのサイズは、SHARED_POOL_SIZE パラメータによって制御されます。SHARED_POOL_SIZE パラメータを 16MB の倍数に設定すると、Esri がサポートするすべてのシステムに対応できるようになります。少なくとも 128MB に設定してください。次に例を示します。

shared_pool_size = 128,000,000

たとえば公共設備やパーセル編集システムをサポートする負荷の高いジオデータベースでは、SHARED_POOL_SIZE パラメータを 250MB 程度に設定しなければならない場合もあります。

3 つの SGA バッファのうち、最も重要なのは共有プールです。SGA がすでに物理メモリのサイズで設定可能な最大サイズになっている場合は、バッファ キャッシュのサイズを減らして共有プールのサイズを増やしてください。

DB_CACHE_SIZE

バッファ キャッシュも Oracle SGA のコンポーネントの 1 つであり、最近使用されたデータ ブロックを格納します。データ ブロックは、Oracle のデータ転送の最小単位です。ユーザがデータベースを編集したり検索したりするたびに、データベースとの間でデータ ブロックが読み書きされます。バッファ キャッシュのサイズは、DB_CACHE_SIZE パラメータによって制御されます。

共有プールやログ バッファとは異なり、バッファ キャッシュに推奨される最小サイズはありません。バッファ キャッシュのサイズを設定するときの目標は、データベースのできるだけ多くのデータをメモリ上に保持することです。このため、システム全体のニーズについて検討した後、利用可能なメモリをすべてバッファ キャッシュに割り当てることを計画してください。そのための見積もりを取得する手順は次のとおりです。

  1. サーバに搭載されている物理 RAM の量を確認します。
  2. このサイズに 0.66 を掛けると、SGA の目安となるサイズが割り出されます。
  3. このサイズから SHARED_POOL_SIZE と LOG_BUFFER の値を差し引くと、バッファ キャッシュに利用できるメモリのサイズが算出されます。
  4. Oracle が内部的に使用するメモリがあるので、この値を 10% 減らします。
  5. さらに、これをデータベース ブロック サイズで割ると、最終的な DB_BLOCK_BUFFERS のサイズが決定します。

次に例を示します。

memory available to SGA = physical RAM * 2/3

memory available to buffer cache
= (memory available to SGA - (shared_pool_size + log_buffer)) * 0.9

db_block_buffers 

= memory available to buffer cache / db_block_size

PGA_AGGREGATE_TARGET

Oracle サーバ プロセスの PGA(Program Global Area)の領域を割り当てます。通常、この領域はテーブル結合時にデータのソートとマージを行うための一時バッファとして使用されます。WORKAREA_SIZE_POLICY を AUTO に設定した後、物理メモリの合計サイズに 0.16 を掛けた値で PGA_AGGREGATE_TARGET を初期設定します。アプリケーションをしばらく使用した後、『Oracle Database パフォーマンス チューニング ガイド』の手順に従って、PGA_AGGREGATE_TARGET を調整します。

workarea_size_policy = auto
pga_aggregate_target = <total physical RAM * 0.16)

メモメモ:

Oracle では、WORKSPACE_POLICY が AUTO に設定されている場合にのみ、PGA_AGGREGATE_TARGET を使用してソートのためのメモリを割り当てます。それ以外の場合は、従来の手動によるソート領域の管理を使用します。これには、SORT_AREA_SIZE パラメータと HASH_AREA_SIZE パラメータの設定が使用されます。

作業領域の自動管理

Oracle では、ユーザ セッションを処理するサーバ プロセスのプライベート メモリを自動的に管理することができます。これは、ASMM(Automatic Shared Memory Management)で共有メモリを管理する方法とほぼ同じです。ソート、ハッシュ、ビットマップ インデックスの処理に使用される SQL 作業領域は、データベース管理者(DBA)が固定サイズに設定するのではなく、Oracle によって利用可能な大きなメモリ プールからすべての PGA に対して動的に割り当てることができます。作業領域の自動管理を有効にするには、WORKAREA_SIZE_POLICY パラメータを AUTO に設定します。次に、PGA_AGGREGATE_TARGET パラメータの値としてサイズを指定することにより、すべての PGA に利用可能なメモリの合計サイズを設定します。デフォルトでは、PGA の集約サイズは SGA のサイズの 20% に設定されます。出発点としては申し分ありませんが、PGA のサイズは、SGA のサイズを基準にするのではなく、サーバ プロセスによって実行される作業のタイプに基づいて設定する必要があります。データベースが標準的な負荷で実行されるようになったら、実際の作業の負荷を監視して、PGA のサイズを微調整することができます。このプロセスの詳細については、『Oracle Database パフォーマンス チューニング ガイド』をご参照ください。

共有メモリの自動管理

Oracle 10g を使用している場合は、SGA の合計サイズを設定して、プール間でのメモリ配分を Oracle で自動的に管理させることができます。これが ASMM であり、SGA_TARGET パラメータによって呼び出されます。ASMM を使用すると、DBA が個々のプールの管理から解放されることに加えて、各プールの需要を Oracle に継続的に監視させ、インスタンスの実行中にそれらのサイズを動的に調整できるようになります。DBA がこのレベルの管理を継続的に行うことは、現実的ではありません。ASMM にガイダンスを提供するには、SGA の合計サイズを指定する SGA_TARGET パラメータと、個々のプールのパラメータを 1 つ以上設定します。SGA_TARGET とプール サイズを両方とも指定すると、Oracle はプール サイズを ASMM がそのキャッシュで維持する最小サイズとして解釈します。

共有プールはジオデータベースのパフォーマンスにとって重要なので、ASMM を使用する際には、SGA_TARGET を設定することに加えて、先に説明したように共有プールの最小サイズ(SHARED_POOL_SIZE 初期化パラメータ)を 128MB 以上に設定してください。

メモメモ:

作業領域と共有メモリの自動管理を使用するには、STATISTICS_LEVEL パラメータを TYPICAL(デフォルト値であり推奨値)または ALL に設定する必要があります。

その他の変更点

初期化パラメータではありませんが、UNDO_POOL データベース リソース マネージャ プラン ディレクティブを設定すると、sde ユーザ のコンシューマ グループに圧縮処理のための大きな UNDO 領域を割り当てることができます。

使用するには、sde ユーザのコンシューマ グループを設定し、UNDO_POOL プラン ディレクティブを変更して、このコンシューマ グループの UNDO プールを無制限にする必要があります。

UNDO_POOL は、1 つのリソース グループのメンバ全員が一度に割り当てることのできる UNDO 領域の合計サイズを指定します。

編集にマルチバージョン対応のジオデータベースを使用する場合は、圧縮処理を定期的に実施して古い情報を削除し、ジオデータベースのコンテンツを簡素化する必要があります。最後の圧縮処理以降に大量の編集が発生していた場合、新しい圧縮処理によって大きなトランザクションが作成され、大きな UNDO 領域が必要になる可能性があります。UNDO_POOL の値が小さすぎると、圧縮処理が失敗して、パフォーマンスが低下するおそれがあります。可能であれば、sde ユーザのコンシューマ グループの UNDO 領域を無制限に設定してください。それができない場合は、圧縮トランザクションのサイズを監視して、適切な大きさの UNDO 領域を選択する必要があります。


3/6/2012