On 25/07/2014 06:46, brucedickin...@wp.pl [firebird-support] wrote:

Hi,

1. I've deleted 500000 records from TABLE A. I've commited transaction.
2. I made SELECT * FROM TABLE A. Transaction was starting for a very long time.

I just wanted to make sure that there is no way to prevent this behaviour? I mean, I can not delay somehow clearing of this garbage?

As far as I understand this article: http://www.firebirdsql.org/manual/gfix-housekeeping.html


there is no such possibility becasue:


"Whenever a subsequent transaction reaches garbage from a /committed/ transaction, that garbage is automatically cleared out."

So it appears. Essentially part of the cost of doing the deletion is palmed off onto some later user, who is faced with unpredictable delays in consequence. For example an overnight housekeeping job can result in the first end user transaction of the day taking orders of magnitude longer than usual (and timing out and crashing, if its timeouts are set to something reasonable).

You can avoid this cost being passed onto the poor user who through no fault of his own is the first to follow the housekeeping by including the "SELECT * FROM TABLEA" as part of the cleanup job, thus putting the cost back with its owner. In other words you can't delay the garbage collection, but you can make it happen earlier so that it's predictable.

--
Tim Ward

  • [firebird-supp... brucedickin...@wp.pl [firebird-support]
    • Re: [fire... Tim Ward t...@telensa.com [firebird-support]
      • Re: [... Thomas Steinmaurer t...@iblogmanager.com [firebird-support]
    • Re: [fire... 'Carlos H. Cantu' lis...@warmboot.com.br [firebird-support]
      • Re: [... 'Carlos H. Cantu' lis...@warmboot.com.br [firebird-support]
        • [... brucedickin...@wp.pl [firebird-support]
          • ... Ann Harrison aharri...@ibphoenix.com [firebird-support]

Reply via email to