October 11th, 2010, 03:15 AM
Firebird server total memory usage question
We have been using Firebird in our warehouse management systems for the last couple of years and have been very impressed by it's performance. I just have a question regarding its memory usage on servers with lots of ram.
We are running a V2.0.x superserver with 100+ connections to the database. The database file is about 10GB and our client applications range from a multi-threaded socket server using the ADO .NET driver to delphi 7 clients using FIBPlus direct connections.
Accoring to Task Mamager the fbserver.exe process only uses about 80MB of ram, but the machine has 4GB to offer (granted only 3.2GB as it's Windows Server 2003 32-bit). Also this is a multi-core cpu, but CpuAffinity has been set to 1 to only use one core.
We are pretty convinced that the database design is not at fault completely, as almost all queries return sub 1 second.
A potential problem is starting to occur now that the database is growing bigger and the connections are increasing and the users are seeing a degredation in performance/response times.
Should we consider classic mode? Keep it mind that 80% of the connections are quick sub 1 second connections from WifI based handheld scanners?
Any advice would be appreciated.
October 12th, 2010, 03:52 AM
Classic is based on Unix philosophy
one process per connections and this way you can use all the cpus in the system
and isolate each connection from each other
sometimes the system can be io starved in database case and to make it faster for I/O must run it on a raid 0/1 or ssd or increase the cache
I will show you how the cache is used and shared in superserver/superclassic/classic
so it might help you if you have a lot of ram to increase the cache buffers
October 13th, 2010, 02:00 AM
Thank you for your reply and links - I've read through them and it makes even more sense now. Superserver has a shared cache which is not ideal for hundreds of connections. I'll give classic a go, and then maybe switch to V2.5's superclassic so simplyfy the server maintenance and control of the instance.
I doubt that the server is straving for IOs, the HDD is not that active and the system (windows os) respondes very quickly. It almost feels as if only 20% of the server's potential output is being used by Firbird and the rest is in idle. Having written other projects in MSSQL i've seen it taking up all the RAM available for cache (unless you limit it), and I am looking for a similar behaviour in Firebird.