多数のキャッシュ・インスタンスのロードおよびリフレッシュにおけるパフォーマンスの向上
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つのスレッドを指定します。