Monday, May 02, 2005

Transaction isolation on recovery

Recovery can be realized only replaying WS log sequencially? I'm not sure that.

If there is a WS log sequence as below.

(1) XID=101, INSERT INTO t1 VALUES ( 1, 'Name 1' );
(2) XID=102, INSERT INTO t1 VALUES ( 2, 'Name 2' );
(3) XID=102, ABORT;
(4) XID=101, COMMIT;

(2) and (3) must be ignored when the RM recover. But if the recovery session replays this sequence in a single transaction,

(1) XID=501, INSERT INTO t1 VALUES ( 1, 'Name 1' );
(2) XID=501, INSERT INTO t1 VALUES ( 2, 'Name 2' );
(3) XID=501, ABORT;
(4) XID=501, COMMIT;

above operations don't insert any records.

So (1),(4) and (2),(3) must be isolated.

But how? I don't think using many transaction sessions in recoverying is a smart way.

1 comment:

Satoshi Nagayasu said...

If the RM forms tuples from WS log and applyes them to the table directly using heap_insert()/heap_update()/heap_delete() functions, isolation can be done in single session.