多数のキャッシュ・インスタンスのロードおよびリフレッシュにおけるパフォーマンスの向上

LOAD CACHE GROUP文またはREFRESH CACHE GROUP文のPARALLEL句を使用してマルチスレッド化する処理を指定することで、多数のキャッシュ・インスタンスをキャッシュ・グループにロードまたはリフレッシュするときのパフォーマンスを向上できます。

PARALLEL句を指定しない場合、ロードまたはリフレッシュ処理はシングル・スレッドになります。ロードまたはリフレッシュ用のマルチスレッド・プロセスを作成するためのPARALLEL句を指定すると、ロードするデータ・セットが大きい場合、またはOracleへのラウンド・トリップ時間が長い場合にパフォーマンス上の利点が得られます。たとえば、Oracle Databaseのデータが大きい場合は、キャッシュ・グループの初期全体ロードに時間がかかることがあります。初期ロードに複数のスレッドを指定すると、その処理のパフォーマンスが向上します。ただし、マルチスレッド・プロセスではシングル・スレッド・プロセスよりも開始に時間がかかり、マルチスレッド・プロセスではより多くのシステム・リソースが使用されることに注意してください。

ロード処理またはリフレッシュ処理を行う場合に使用するスレッド数を指定します。2から10のスレッドを指定できます。システムで使用可能なCPU数を超えるスレッドを指定すると、PARALLEL句を使用しなかった場合よりもパフォーマンスが低下することがありますので、このような指定を行わないでください。

ノート:

PARALLEL句のデフォルトはありません。

WITH ID句をPARALLEL句と併用することはできません。COMMIT EVERY n ROWS句は、nが0より大きな値であるかぎり、PARALLEL句と併用できます。また、データベース・レベルのロックが有効になっている場合や動的読取り専用キャッシュ・グループに対してはPARALLEL句を使用できません。『Oracle TimesTen In-Memory Database SQLリファレンス』「REFRESH CACHE GROUP」を参照してください。

次の例では、PARALLEL句を使用して、TimesTenキャッシュ表のキャッシュ・インスタンスをリフレッシュします。この例では、1つのスレッドを使用して、キャッシュされたOracle Database表からwestern_customersキャッシュ・グループをリフレッシュし、キャッシュされたOracle Database表から行をフェッチし、1つのスレッドで行をキャッシュ表に挿入します:

LOAD CACHE GROUP western_customers COMMIT EVERY 256 ROWS PARALLEL 2;

PARALLEL句で指定するスレッドの数は、リーダーおよびインサータに割り当てられます。TimesTenでは、リーダーがインサータより遅いため、リーダーの数をインサータの数以上にすることをお薦めします。デフォルトでは、キャッシュされたOracle Database表から行をフェッチするためにリーダーに割り当てられるスレッドは1つのみです。デフォルトではリーダーは1つのみであるため、TimesTenは、TimesTenキャッシュ表に行を挿入するインサータとして、他のスレッドの1つのみを割り当てます。1つのリーダーにインサータを追加してもメリットはありません。

2つを超えるスレッドを指定する場合は、READERS句とともにPARALLEL句を使用して、割り当てるリーダーの数を指定します。割り当てられるインサータの数は、パラレル・スレッドの数からリーダーの数を引いた値です。

LOAD CACHE GROUP western_customers COMMIT EVERY 256 ROWS 
                          PARALLEL 6 READERS 4;

これは、リーダーに4つのスレッドが割り当てられ、インサータに2つのスレッドが割り当てられた6つのスレッドを指定します。