Hi,
I'm using Postgres 8.4 and I have a lot of tables that have this basic schema:
Code:
CREATE TABLE Table1
(
identifier character varying(32) NOT NULL,
virtual_location numeric(4,0),
counter1 numeric(3,0),
counter2 numeric(3,0),
counter3 numeric(3,0),
...
...
);
I'm querying these tables with something like this over JDBC:
Code:
SELECT T.* FROM Table1 T WHERE virtual_location >= ? and virtual_location < ?
These are read-only tables indexed on virtual_location. I'm doing a few of these reads in parallel, no two reads access the same table. I've tested with different levels of parallellism.
I have SSD drives in a SAN system with 10Gb connections between the client and server machine, and I've tested normal copy operations from the client machine over an NFS mount to the Postgres machine and I can get read speeds of >300MB/s. But when I run my queries dstat on the server machine tells me that net I/O is ~50MB/s and disc read I/O is ~50MB/s and the CPU's on both the client and server are mostly idle.
Does anybody have an idea of where the bottleneck in this system is? Is Postgres doing so many small reads that the disc latency is actually the bottleneck and can something be done about this?
Thanks!