Subject Re: [firebird-support] RE: Garbage collection / sweep not happening on super classic
Author Ann Harrison
On Wed, Jan 15, 2014 at 4:42 PM, <rmcginty@...> wrote:


Ok, running the gfix -sweep with everyone logged out did work and only took about 5 minutes.  I believe the issue came from me only trying to run the sweep one time and a transaction being stuck.  I never tried to run sweep AFTER restarting the services.  I also think there was confusion because I was under the incorrect assumption that gbak was doing a sweep while backing up.

Gbak (without the -g switch) will remove old record versions, but, like a sweep, it only works up to the oldest transaction that was active when the oldest transaction currently open started.  So if you have a transaction that's stuck, neither gbak nor sweep will remove versions newer than some version older than the stuck transaction.

The difference between sweep and a gbak backup without the -g  is that sweep resets the value of the Oldest Interesting Transaction (OIT), and gbak does not.  After a sweep, all record versions older than the sweep threshold are guaranteed to be committed.  That used to be important because InterBase had to carry around a bit vector the length of the difference between the OIT and the current transaction - which could be a lot of bits on a machine with a mid-1980's sized memory.  Each bit in the vector represents the state of a transaction - committed or not.  The vector still exists, but it takes a whole lot of bits to use any significant fraction of the memory of a modern computer.

Good luck,

Ann