Subject Re: RES: [firebird-support] Internal Firebird question.
Author Dmitry Kuzmenko
Hello, Fabiano!

Monday, May 21, 2012, 10:32:32 PM, you wrote:

F> After deleting cod=2, I make a backup with garbage collect set and do a

Don't be mistaken. gbak -b makes select * from table
and this causes attempt server to check for a garbage and try to
collect it, and
gbak -b -g disables checking for a garbage.
So, by default gbak causes garbage collection, and with -g option
it forces server not to check for a garbage (for this particular
connection).

F> You right, it uses free space when the page are touched.
F> I make a mistake. The old data continues on datapage but pointers are
F> updated. Now it shows me 3 records.

I don't get why you are digging so deep. If you are just curious,
read

http://www.firebirdsql.org/manual/fb-internals.html

the data page is described in this section:
http://www.firebirdsql.org/manual/fbint-page-5.html


If you are just worrying that your database
"grow constantly", than forget the physics,
and concentrate on transaction control in your
application.
for example, if you will start long-running snapshot transaction,
server will not consider old versions as a garbage, and will keep
packets of record versions needed by that transaction.

Personally I saw DB with 1 record having 1.5 million versions, kept
by transaction that stalled for a week.
Imagine how many DB space this record can take, and how long
server will work to show some transaction it's version.
And, of course, how much time it will take to collect these versions
as garbage (finally).

--
Dmitry Kuzmenko, www.ib-aid.com