Simon,
> The issue is that no matter how much query load we throw at our server it
> seems almost impossible to get it to utilize more than 50% cpu on a
> dual-cpu box. For a single connection we can use all of one CPU, but
> multiple connections fail to increase the overall utilization (although
> they do cause it to spread across CPUs).
This is perfectly normal. It's a rare x86 machine (read fiber channel) where
you don't saturate the I/O or the RAM *long* before you saturate the CPU.
Transactional databases are an I/O intensive operation, not a CPU-intensive
one.
> We are running with shared buffers large enough to hold the
> entire database
Which is bad. This is not what shared buffers are for. See:
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
--
Josh Berkus
Aglio Database Solutions
San Francisco