Subject Re: [firebird-support] Re: Performance when deleting a lot of records, again
Author Ann W. Harrison
Daniel Rail wrote:
> Because according to your stats, there's 908,214 transactions that
> have a big chance of not being garbage collected. Although you have a
> sweep interval set to 2,000 transactions, it doesn't guarantee that
> the sweep will be performed,

Even if the sweep/garbage collect thread does run, it can't remove
record versions that are visible to active transactions. The problem is
a long-lived snapshot transaction.

> Also, is it possible that you have a transaction that might remain
> open? I.e.: A simple read-only select, using a read-write transaction,
> on DEVICE_FREE_SPACE and/or STATUS_KEEPER, either in that application
> or another application.

The transaction that's open may not have done anything - it certainly
doesn't have to have touched the two bad tables. Remember, a snapshot
is a stable view of the database, not just a particular table. That's
important for consistency in many cases. Consider the case of two
tables, credits and debits. If you read credits before another
transaction makes a credit/debit adjustment, then read debits, you must
read the debit table in the state it was in before the change.