I have developed a Delphi 7 application that is using Firebird 1.5.6 database in client server environment.
The application is running on Windows 7 32 bit on notebook computer an the database is running on Windows XP 32-bit machine that is used as a server. The problem is the application is freezing itself when it is left idle for some time. This problem never occured on Windows XP only when we installed it on Windows 7.
Everything was working fine for 5 years but now on Windows 7 the application is totaly unstable.
Sometimes the wake up time is 10-30 sec with success but sometimes never with messages "application not responding" or "application crashes".
I have no idea where to search or what to try to find a solution. I tried to make a timer with 10 secconds resolution to make it constantly active but with no success.
BTW I am running in Administrator mode with XP Compatibility mode active. I have not tried the virtual XP Mode yet but I think it will not solve t开发者_如何学编程he problem.
I had a similar problem: on some standalone machines (firebird server and client on same PC) with Windows 7 32-bit, there were sometimes freeze of application (Delphi 7).
All freezes had the same time (60 seconds). I tried to change firebird.conf
and after some tests I found the parameter DUMMY_PACKET_INTERVAL
.
I set it to a very low value and the freezes seem to have disappeared.
Certainly there are problems with your connection that remains open.
Control firebird.log and try to test yourself.
Good luck. See this help page for more info.
Could it be that the database file's extension is .gdb and windows is XP is backing up the file as described here http://www.firebirdfaq.org/faq353/?
If you never did solve it, I think its to do with transactions. You said that the connections were active all the time. I would guess that you are using automatic/auto-commit transactions. When you do this the transaction of interest never moves because the transaction is always retained (commit and retain).
When this happens, firebird can not clean up the garbage without running the garbage collection process. This causes two issues.
Queries keep on slowing down as firebird has to trawl through more and more versions of the data.
Then firebird reaches a difference in transaction count reaches the default of 20000, it performs garbage collection slowing down everything massively.
The solution is to not use autocommit transaction. And if your daily transaction count is high then set the firebird count to a higher value and do the garbage collection yourself at a more suitable time.
精彩评论