Subject Getting IBServer to release memory
Author chriskudla
One of our users running Firebird 1.0 Classic on Windows 2003 Server
has occasions where they perform a procedure which seems to cause
IBserver to use large quantities of memory. We have checked the
application using Memproof and there are no open transactions or
memory leaks.
Our app is written using Delphi 7 and we are using the TIBSQL
component to update fairly large volumes of transactions in this
particular function.
It seems as if IBserver re-uses the memory (which we are monitoring
with Task Manager) however it seems the only way to make it release
the memory is to stop and restart the service.
This is a bit problematic as the server is in use for at least 12
hours of the day and is complicated by the fact the they are using
Terminal Services for the client connections to the server, meaning
that the client applications plus the IBserver are all running on the
one machine.
Is the only solution to stop and start the Ibserver on a regular
basis?

I have also read that one can call SetProcessWorkingSetSize and pass
it the handle of the process you want to have swept and -1, -1 as the
other two params. This causes windows to sweep the app to release
heap space. I only seem to be able to run this function on a process
if it running as an application. When I try to run it against
IBServer running as a service, I get "Access Denied" errors.
Is it worthwhile running Interbase as an app, rather than as a
service, and then running this function occasionally throughout the
day, or will this just be detrimental to the performance of the
server, as now its memory is all sitting as virtual memory on the
hard disk?
The reason why I am doing this is to make any extra memory available
for the EXE's that are also running on the server.