Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

We've got a setup that we're using for different clients : a program connecting to a Firebird server on a local network.

So far we mostly used 32bit processors running Ubuntu LTS (recently upgraded to 10.04).

Now we introduced servers running on 64bit processors, running Ubuntu 10.04 64bit.

Suddenly some queries run slower than they used to.

In short: running the query locally works fine on both 64bit and 32bit servers, but when running the same queries over the network the 64bit server is suddenly much slower.

We did a few checks with both local and remote connections to both 64bit and 32bit servers, using identical databases and identical queries, running in Flamerobin.

Running the query locally takes a negligible amount of time: 0.008s on the 64bit server, 0.014s on the 32bit servers. So the servers themselves are running fine.

Running the queries over the network, the 64bit server suddenly needs up to 0.160s to respond, while the 32bit server responds in 0.055s.

So the older servers are twice as fast over the network, in spite of the newer servers being twice as fast if run locally.

Apart from that the setup is identical. All servers are running the same installation of Ubuntu 10.04, same version of Firebird and so on, the only difference is that some are 64 and some 32bit.

Any idea??

I tried to google it, but I couldn't find any complains that Firebird 64bit is slower than Firebird 32bit, except that the Firebird 2.1 change log mentions that there's a new network API which is twice as fast, as soon as the drivers are updated to use it.

So I could imagine that the 64bit driver is still using the old API, but that's a bit of a stretch, I guess.

Thanx in advance for any replies! :)

share|improve this question
Using the 32bit Ubuntu on the same server runs fast, so it's not a hardware problem. – lyle Jul 14 '10 at 4:50
Looks like I should be more careful what I write. :) The 32bit Ubuntu we tried on this server was 9.10, after trying 10.04 on the same server, it was slow again. So on this server Firebird is slow when running Ubuntu 10.04, regardless of whether it's 32bit or 64bit. – lyle Jul 14 '10 at 7:53

are other network transactions slow on the 64 bit servers? Could be something as simple as a bad or outdated network driver.

share|improve this answer
Nope, I checked the ping response time and the download speed, both are way better on the 64bit server compared to the 32bit one. – lyle Jul 12 '10 at 7:47

Make sure the following things on old and new servers

  1. Check window scaling on old and new servers

  2. The read and write buffer for a connection

    the size of buffers can be tweaked as required

    root@x:~# sysctl -A | grep net | grep mem

    Check for these variables

    These specify the maximum default memory buffer usage for all network connections in kernel

    net.core.wmem_max = 131071
    net.core.rmem_max = 131071
    net.core.wmem_default = 126976
    net.core.rmem_default = 126976

    These specify buffer memory usage specific to tcp connections

    net.ipv4.tcp_mem = 378528 504704 757056
    net.ipv4.tcp_wmem = 4096 16384 4194304
    net.ipv4.tcp_rmem = 4096 87380 4194304

    The three values specified are "min default max" buffer sizes. So to start with linux will use the default values of read and write buffer for each connection. As the number of connection increases, these buffers will be reduced (at most till the specified min value). Same is the case for max buffer value.

    These values can be set using this sysctl -w KEY=KEY VALUE

  3. Check other tcp networking parameters

    Try these

    on old server

    sysctl -a | grep ^net.ipv4 >s1

    on new server

    sysctl -a | grep ^net.ipv4 >s2

    now do a diff of files s1 and s2 (after copying s2 to old server

    diff s1 s2

    This will show difference in parameters

  4. check status of iptables

    iptables -L 
    iptables -t nat -L 

    on both servers

  5. Also check status of selinux

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.