Subject Firebird 2.5 classic performance issue on linux64
Author Andreas Zeller
Hi everyone,

I'll try and provide as many details as possible, so this message is
going to be a little bit longer, but here goes:

I encountered a bit of trouble migrating a firebird server from an
ancient w2k SBS to a powerful debian-based DL380 server.

I'll share my story, so people facing the same problems can scratch
things off their list. First off, the application connecting to firebird
was horribly slow. After the switch to classic flavor, things didn't
really seem to change, but our client told us it has become a bit better.

The following things have already been done:

- increase page size to 16kB (gbak -> and restore with new pagesize)
- increased buffers for firebird to use up to 4GB of ram (256kB) via gfix
- switchted to async writes because we have redundancy and data security
on hardware level (also via gfix)
- got rid of automatic sweeping by transaction count and added a cron
job to handle this after hours

After all of this didn't really seem to do much, we had to pull out the
big guns:

- additional raid controller
- additional two-disk raid-0 array
- switched to XFS (the firebird db file is 43 GB big)

Performance improved a bit, but still not the way we would like it to be.

Here are a few things that I have personally noticed:

- $FIREBIRD_TMP="/path/to/my/fast/space/" will be entirely ignored.
- setting TempDirectories doesn't seem to get evaluated either

That makes me think which other settings I did in firebird.conf will
just be thrown out of the window. We run firebird through xinetd, I even
gave it a scheduler priority (nice value) of -15 but CPU doesn't really
seem to be the issue. It just seems like firebird takes forever to
process a request that goes across several tables.

Here's the stuff that is out of our control:

The software using firebird under the hood is just horribly designed.
There's binary data in the database, which makes it huge to begin with
and I doubt that queries, selects, joins, etc. are implemented in a
smart way.

BUT: all of this ran pretty fast on an ancient windows machine with
synchronous writes and lots of other inefficient configuration. I also
read that certain borland libraries are having performance issues
connecting to a linux64 firebird.


Serverside: firebird2.5-classic: Installed:
Clientside: gds32.dll / dbxup_fb.dll

Connection is done via network host:/path/to/db-file.fdb which works
just fine, but horribly slow.

If you guys need any more input, I can provide it.

- What else can I do to improve performance (I'm still missing the one
thing that feels like releasing the hand-brake)?
- Why is firebird ignoring the environment variable and the .conf setting?
- Is there a way to explicitely provide a config file to firebird? The
manual page doesn't offer such an option.

Thanks very much in advance and sorry for whipping up half a novel :)


*Andreas Zeller*

Geschäftsleitung <>
Carl-Friedrich-Gauss-Str. 56
47475 Kamp-Lintfort

Office: +49 2151 32 66 628
Fax: +49 2151 32 66 721
Mobil: +49 163 27 9 1979