Subject Re: [firebird-support] OIT / NT
Author Ann Harrison
On Fri, Mar 30, 2012 at 4:13 AM, Tiberiu Horvath

> I use Firebird Transaction Statistic Logger to see the problem. ... While
> this client is using my software, somehow the gap between OIT and NT
> increases 200 transactions each 5 seconds.

OK, time for my lecture on OAT and OIT.

The OIT is the oldest transaction in the system that did not commit -
usually a transaction that failed but could not roll itself back. They're
more common in Classic that SuperServer because the latter rolls back
transactions after a normal failure. But if one of the client processes is
killed, it will leave all its transactions marked as rolled back. There
are only two ways to increase the OIT. Backup/restore or sweep. The good
news is that an old, stuck OIT doesn't matter much at all. A very long
time ago when we could only dream of have a gig of disk (and not even
imaging a whole gig of memory), keeping a list of the states of old
transactions (at two bits per transaction) between the OIT and current
transaction was a problem. It's not any more.

So don't worry about the difference between the OIT and next, or if you
must worry, run a sweep from time to time.

The OAT is the oldest transaction that the system considers to be active.
It blocks garbage collection and induces database bloat. Transactions
that commit using "commit retaining" do not advance the OAT. Transactions
that are left open for hours - even transactions that have not changed
the database - leave the OAT stuck. Once the OAT is stuck, Firebird must
keep old versions of records that transaction might read if it ever wakes
up and starts working again.

Do worry about a stuck OAT. Use the MON$ tables to identify it and stop it.

Good luck,


[Non-text portions of this message have been removed]