直列化オプションをONに設定した場合、行の操作は実行依頼された順序で連続して処理されます。
SERIALIZE ONという順序キーは、入力データのSCHEMA定義内に出現する1つ以上の列名として指定されます。 これらのSCHEMA列は、キーとして集合的に参照されます。 通常このキーは、更新中のテーブルのプライマリ インデックスですが、異なる列にしたり異なる列のセットにしたりできます。 例えば、次のように指定できます。
APPLY
('UPDATE emp SET dept_name = :dept_name
WHERE empno = :empno;')
SERIALIZE ON (empno)
TO TARGET_TABLE[1]
このAPPLY文によって、同一のキー(empno)を持つすべてのデータ行が、Producerオペレータから受信された順序と同一の順序でデータベースに適用されることが保証されます。 この場合は、empno列はEmpテーブルのプライマリ インデックスです。
SERIALIZE ONは特定のDML文に対してローカルであることに注意してください。 以下の例では、グループDMLが指定されていますが、最初のステートメントのみが直列化オプションを使用します。
APPLY
('UPDATE emp SET dept_num = :dept_num
WHERE empno = :empno; ')
SERIALIZE ON (empno)
('UPDATE dept SET dept_name = :dept_name
WHERE deptno = :deptno; ')
TO TARGET_TABLE[1]
直列化オプションを使用する利点の一部と、予想されるパフォーマンスの向上を以下に示します。
- SERIALIZE ONは、複数セッションによるプライマリ インデックスの衝突によって発生するロックの遅延また潜在的なデッドロックを削除できます。
- SERIALIZE ONは、非固有プライマリ インデックス値を持つ行を処理する際のデッドロックも削減できます。