Subject | Re: [firebird-support] Transactions isolation levels and collisions |
---|---|
Author | Ann Harrison |
Post date | 2017-03-01T14:44:58Z |
On Mar 1, 2017, at 9:53 AM, Aldo Caruso wrote:
Ann,
Thanks for your detailed answer.
But this leads me to the following question: If snapshot transactions have their own copy of the Transaction Inventory Pages ( TIP ), taken when the transaction started, transaction A couldn't see the state of transaction B or transaction C ( because they are not in this copy ).
So I guess that snapshot transactions use its own copy of TIP for reading ( selects ), but when it comes to updates or deletes, in order to search for collisions, they should also access the global shared TIP.
When a snapshot transaction tries to update a record and finds that the most recent version was created by a transaction that was active or unknown according to its copy of the TIP, it attempts to take a lock on that transaction's id.
Every transaction holds an exclusive lock on its id until it ends. When the lock is granted to the waiting transaction, it knows that the other transaction has ended and asks the transaction management module for the final state of the dead transaction.
Good luck,
Ann