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! :)
are other network transactions slow on the 64 bit servers? Could be something as simple as a bad or outdated network driver.
Make sure the following things on old and new servers
Check window scaling on old and new servers
The read and write buffer for a connection
the size of buffers can be tweaked as required
Check for these variables
These specify the maximum default memory buffer usage for all network connections in kernel
These specify buffer memory usage specific to tcp connections
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
Check other tcp networking parameters
Try these
on old server
on new server
now do a diff of files s1 and s2 (after copying s2 to old server
This will show difference in parameters
check status of iptables
on both servers
Also check status of selinux