Subject | Re: [firebird-support] Re: Can stopping the Firebird Server damage database if a sweep is being performed - Email found in subject |
---|---|
Author | Michael Ludwig |
Post date | 2010-05-15T13:51:01Z |
hvlad schrieb am 15.05.2010 um 07:08:38 (-0000):
the OIT and the OAT before automatic sweep will kick in.
of a failed two-phase commit involving multiple databases. So that's too
advanced for me right now. :)
What does "rollback via TIP" (Transaction Inventory Page) mean? Just a
ROLLBACK, like, via ISQL?
SS works by tagging obsolete versions and relying on the background
thread to clean them up. But maybe both tactics have been combined to
work on both architectures since the book was published.
rolled-back or limbo transaction that are disposable but have not been
removed because no other transaction has encountered those corners of
the database during its activity?
And those back versions are only left over because when the transaction
was rolled back, its changes weren't cleaned up immediately and it was
not marked as committed in the TIP, so case (b) in your explanation? But
marked as dead instead, and the work left to be done later, so case (a)?
that there are no versions belonging to that transaction hanging around
any more?
--
Michael Ludwig
> > > > > Sweep interval is not a "number of transactions since theAccording to the book (p.518), it is the maximum size of the gap between
> > > > > last sweep".
the OIT and the OAT before automatic sweep will kick in.
> > > OIT can move forward without a sweep. There is two possibleAccording to the book, again (p.515), a limbo transaction is the result
> > > reasons for OIT to stuck :
> > > a) rollback via TIP
> > > b) limbo transaction
of a failed two-phase commit involving multiple databases. So that's too
advanced for me right now. :)
What does "rollback via TIP" (Transaction Inventory Page) mean? Just a
ROLLBACK, like, via ISQL?
> When Firebird performs ROLLBACK it have to choose between two ways :Seems that cooperative GC is what happens on CS (book, p.517), whereas
> a) mark transaction as dead in TIP, or
> b) undo all changes by transaction and mark transaction as committed
> in TIP.
>
> What to choose is dependent on size of internal undo-log of this
> tansaction and urgency of rollback (when engine is shutted down,
> active transactions should be rolled back as fast as possible).
>
> Case (a) means stuck OIT and additional job for cleaning dead
> versions for next transactions.
>
> Case (b) means slower rollback but without any impact on next
> transactions.
> > So what I understood is that garbage collection is a reqular
> > background activity that removes disposable versions of records,
> > also termed "back versions". Nobody needs those any more, nobody
> > (i.e. no transaction) is interested in them.
>
> Almost correct. Note, garbage collection (gc) could run not only in
> background but also as part of regular read activity. This is
> coperative gc.
SS works by tagging obsolete versions and relying on the background
thread to clean them up. But maybe both tactics have been combined to
work on both architectures since the book was published.
> > Sweeping, on the other hand, occurs as a protecting measure toAnd it has this ability because it finds back versions belonging to a
> > prevent the database from drowning in garbage, which is the result
> > of old transactions (that were neither committed nor aborted) still
> > lurking around and clinging on to those old versions of records.
>
> Sweep is total garbage collection. I.e. it cleans whole database.
> While background and cooperative gc cleans only parts of database. As
> sweep cleans backversions from all relations it have ability to move
> forward stuck OIT - this is the most important difference from regular
> gc.
rolled-back or limbo transaction that are disposable but have not been
removed because no other transaction has encountered those corners of
the database during its activity?
And those back versions are only left over because when the transaction
was rolled back, its changes weren't cleaned up immediately and it was
not marked as committed in the TIP, so case (b) in your explanation? But
marked as dead instead, and the work left to be done later, so case (a)?
> Note, if application have good transaction control and there is noWhich it can do because after having done the sweep the engine knows
> very long running transactions, then regular gc (background and\or
> cooperative) usually cleans almost all unneeded recors versions and
> sweep have almost nothing to do, except of reading whole database (or
> not whole - in FB3) and moving OIT forward.
that there are no versions belonging to that transaction hanging around
any more?
--
Michael Ludwig