While running, transactions use data resources without acquiring locks on those resources. Before committing, each transaction verifies that no other transaction has modified the data it has read. If the check reveals conflicting modifications, the committing transaction rolls back and can be restarted

  • Read
  • Validate
  • Write


high concurrency, fast performance, and no locking of records, which requires additional server resources


  • High overhead for copying data locally.
  • Validation/Write phase bottlenecks.
  • Aborts are more wasteful than in 2PL because they only occur after a txn has already executed.