A method for performing a transaction on a database including a collection of records in a persistent system (220A, 220B) coupled to one or more processors (102; 210A, 210B) via a bus, wherein the persistent system serves as at least part of a main memory, wherein the transaction implements multi-versioning in which a record is not updated in place, the method comprising the following sequence of steps: for each record version that is created by the current transaction, performing the following: before storing a new record version into an empty record slot in the persistent system, filling the record slot with a predetermined background bit pattern and persisting the pattern; when the record version is written to the empty record slot, checking whether the background pattern shows through; storing in a log buffer for the transaction post-commit processing information to the persistent system wherein the post-commit processing information includes at least a commit marker for a current transaction, a pointer for each record version that is created by the current transaction and for each record version that is updated by the current transaction, and a list of bit maps, at most one for each newly created record version, wherein each bit in the bit maps corresponds to a unit in the empty record slot to which the new record version was stored that can be atomically persisted in the persistent system, and wherein a bit is set for any atomic unit that happens to contain the background pattern, and is not set otherwise; at a recovery time, checking the atomic units of the transaction's new record versions, wherein if an atomic unit does not contain the background pattern, concluding that the atomic unit was persisted, and if the atomic unit contains the background pattern, checking a corresponding bit of the record version's bit map, and if the bit is set, concluding that the atomic unit is correct and otherwise concluding that the atomic unit was not persisted in the database. for each record version that is created by the current transaction, performing the following: before storing a new record version into an empty record slot in the persistent system, filling the record slot with a predetermined background bit pattern and persisting the pattern; when the record version is written to the empty record slot, checking whether the background pattern shows through; storing in a log buffer for the transaction post-commit processing information to the persistent system wherein the post-commit processing information includes at least a commit marker for a current transaction, a pointer for each record version that is created by the current transaction and for each record version that is updated by the current transaction, and a list of bit maps, at most one for each newly created record version, wherein each bit in the bit maps corresponds to a unit in the empty record slot to which the new record version was stored that can be atomically persisted in the persistent system, and wherein a bit is set for any atomic unit that happens to contain the background pattern, and is not set otherwise; at a recovery time, checking the atomic units of the transaction's new record versions, wherein if an atomic unit does not contain the background pattern, concluding that the atomic unit was persisted, and if the atomic unit contains the background pattern, checking a corresponding bit of the record version's bit map, and if the bit is set, concluding that the atomic unit is correct and otherwise concluding that the atomic unit was not persisted in the database.