CACHE オプション、CREATE SEQUENCE ステートメントの
CREATE SEQUENCE ステートメントの CACHE オプションは、指定された数の順次値をメモリー内に事前割り振りするようDb2に指示する、パフォーマンスおよびチューニング・オプションです。
シーケンス・オブジェクトは、Db2アプリケーションに固有の値、順次値、および数値を提供します。 アプリケーションは、シーケンス番号を種々の目的に使用できます。
例えば、これによって、アプリケーションがアプリケーション独自のシーケンス番号を生成する
ときに起こり得る並行性およびパフォーマンス上の問題を回避できます。 アプリケーションが生成するシーケンスとは異なり、 Db2 シーケンスオブジェクトでは、複数のトランザクションが同時にシーケンス番号をインクリメントすることができ、 Db2 は各シーケンス値が一意であることを保証します。 Db2 シーケンスをインクリメントしたトランザクションがコミットするのを待たずに、別のトランザクションでシーケンスをインクリメントできるようにします。 そのシーケンスへのアクセスを防ぐための保持ロックは保持されません。
キャッシュが割り振られるたびに、SYSIBM.SYSSEQUENCES 表が更新されて、その更新に対する強制ログ・レコードが書き込まれます。 ORDER または NO CACHE を使用すると、SYSIBM.SYSSEQUENCES 表が更新され、Db2によって新しい値が生成されるたびに、関連する強制ログ書き込みが行われます。 CACHE を指定すると、そのキャッシュから値が割り当てられるため、シーケンスへの高速アクセスが可能になります。 また、SYSIBM.SYSSEQUENCES の更新の数と、関連した強制ログ・レコードの数も減少します。 SYSIBM.SYSSEQ 表スペースは、SYSIBM.SYSSEQUENCES 表が更新されるときにデータ共用環境におけるページ P ロック競合を最小化するため MAXROWS(1) 属性を使用して定義されます。
Db2は、要求の順序でシーケンス番号を常に生成します。 ただし、シーケンスがデータ共用グループの複数のメンバー間で共用される場合、各Db2メンバーは、そのシーケンスに固有の連続番号のキャッシュをそれぞれ割り振ります。 したがって、異なるメンバーからのトランザクションが同じシーケンスから次のシーケンス番号を要求している場合には、複数のDb2メンバーにまたがってシーケンスに割り当てられた値が、厳密な数値順になっていない可能性があります。
DB2A に関連付けられているトランザクションが、シーケンス番号を最 初に要求すると、DB2A は、20 個の値 (1 から 20) のキャッシュを割り振り、値 1 がそのアプリケーションに提供されます。 DB2B に関連付けられているトランザクションから、シーケンス番号の次の要求が出されると、DB2B は、20 個の値 (21 から 40) の固有のキャッシュを割り振り、値 21 がそのアプリケーションに提供されます。
シーケンス番号要求が、メンバー DB2A と DB2B に関連付 けられるトランザクションからこのように (DB2A から 1 つ、次に DB2B から 1 つ) 到着し続けるとすると、そのシーケンスに割り当てられる値は、1、21、2、22、3、23 のようになります。 各Db2内でシーケンス番号が順番になっていますが、複数のDb2メンバーにまたがって割り当てられた番号は、厳密な数値順ではありません。
データ共用環境では、ORDER オプションまたは NO CACHE オプションを使用すると、複数のDb2メンバー間でアプリケーションによって共用されるシーケンスに割り当てられた値が、厳密な数値順になるようにします。 データ共用環境で、ORDER が指定された場合は、たとえ CACHE n が指定されていても暗黙的に NO CACHE と解釈されます。
非データ共用環境では、たとえ NO ORDER が指定されていても、この数値は、常に厳密な番号順に割り当てられます。したがって、ORDER あるいは NO CACHE を指定する必要はありません。