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
