Issue Details (XML | Word | Printable)

Key: CORE-3994
Type: Improvement Improvement
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Dmitry Yemanov
Reporter: Dmitry Yemanov
Votes: 1
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
Firebird Core

Improve the limbo transactions scan at the end of the sweep

Created: 22/Nov/12 01:57 PM   Updated: 23/Apr/13 02:12 PM
Component/s: Engine
Affects Version/s: 2.1.0, 2.1.1, 2.0.5, 2.1.2, 2.1.3, 3.0 Initial, 2.0.6, 2.5.0, 2.1.4, 2.5.1, 2.0.7, 2.1.5, 2.5.2
Fix Version/s: 3.0 Alpha 1, 2.5.3

Time Tracking:
Not Specified

Issue Links:
Relate
 

Planning Status: Unspecified


 Description  « Hide
After performing a garbage collection pass, the sweep advances the global OIT number. But it cannot be advanced further than the oldest known in-limbo transaction. In order to find one, the engine scans all the transactions since the old OIT. But the used algorithm has a quadratic cost, so it looks like a server hang if the transaction gap is big enough. See CORE-3908 for the test details.

 All   Comments   Work Log   Change History   Version Control   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Dmitry Yemanov added a comment - 22/Nov/12 05:24 PM
Firebird 3 suffers from this issue much less due to the optimized data structures in the transaction cache. But O(n) is still better than O(n * lg(n)), so I've committed it there too.