Subject Re: Forcing sweep on particular table
Author Adam
--- In firebird-support@yahoogroups.com, "robertgilland"
<robert_gilland@...> wrote:
>
> > At 10:09 AM 15/06/2006, you wrote:
> > >Is there any way to force a sweep on a particular table?
> >
> > No. But you can force GC on the table by doing a select count(*)
> on it.
>
> So you mean if I do
> SELECT COUNT(*)
> FROM MYTABLE
>
> this automatically forces a Garbage Collection?
>
> What If I do
>
> SELECT COUNT(*)
> FROM MYTABBLE
> WHERE PRIMARYKEYFIELD = AVALUE
>
> Does this force a Sweep?

No, gc <> sweep.

The above query you wrote removes any back versions that are no longer
required for that particular record.

To entirely cleanup MYTABLE, you need to count it without a where clause.

>
> By TM do you mean Transaction Management?
> We use InterXPress and our settings are:
>
> RoleName=RoleName
> ServerCharSet=
> SQLDialect=3
> BlobSize=-1
> CommitRetain=False
> WaitOnLocks=True
> ErrorResourceFile=
> LocaleCode=0000
> Interbase TransIsolation=ReadCommited
> Trim Char=True
>
> Any problems with these?
>
> We don't actually use Transactions, at the moment.
> But we are looking at doing so very soon.

Basically, long running transactions with lots of updates to a single
record make garbage collection quite difficult. Commit retaining does
not allow the old record versions to be cleaned up.

Some componentsets use the concept of autocommit, which tries to dumb
down transactional databases into flat file databases (either
intentionally or as a side effect). Such components will cause you
grief in the long term, so it is highly advised to fix anything using
autocommit to have explicit transaction commits and rollbacks.

Adam