[postgis-users] Looking for more performance on select
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Fri Dec 29 04:29:41 PST 2006
On Tue, 2006-12-26 at 16:12 +0100, Eric FRANCOIS wrote:
> Hello,
>
> I'm looking for help to improve postgres performance query.
>
> I've 2 tables:
> streets_db_egdes with 6 millions record, field 'id' is the primary of the
> table
> streets_db_big with 800000 records with an index on a field named edge_id
> and on a geometry field name the_geom.
>
> vaccum analyse is run on the database twice a day.
>
> The following query is runned in 15 seconds:
> SELECT gid as id FROM streets_db_big as m
> where setsrid('BOX3D(1.65924 43.38176,3.16274 50.73713)'::BOX3D,4326) &&
> m.the_geom
>
>
>
>
> The query with a join between the 2 table runs in near 60s:
> SELECT gid as id, source::integer, target::integer, cost::double precision
> as cost,reverse_cost::double precision as reverse_cost FROM streets_db_edges
> as s,streets_db_big as m
> where m.edge_id=s.id and setsrid('BOX3D(1.65924 43.38176,3.16274
> 50.73713)'::BOX3D,4326) && m.the_geom
>
> the explain:
>
> Hash Join (cost=85806.40..329366.66 rows=174676 width=28) (actual
> time=22946.953..56012.747 rows=164889 loops=1)
> Hash Cond: (s.id = m.edge_id)
> -> Seq Scan on streets_db_edges s (cost=0.00..153395.40 rows=5894540
> width=28) (actual time=16.912..17790.444 rows=5894540 loops=1)
> -> Hash (cost=85369.71..85369.71 rows=174676 width=8) (actual
> time=22898.034..22898.034 rows=164889 loops=1)
> -> Bitmap Heap Scan on streets_db_big m (cost=5530.26..85369.71
> rows=174676 width=8) (actual time=5446.865..22464.712 rows=164889 loops=1)
> Filter:
> ('0103000020E61000000100000005000000CE70033E3F8CFA3FE275FD82DDB04540CE70033E
> 3F8CFA3F43739D465A5E494021020EA14A4D094043739D465A5E494021020EA14A4D0940E275
> FD82DDB04540CE70033E3F8CFA3FE275FD82DDB04540'::geometry && the_geom)
> -> Bitmap Index Scan on streets_db_big_the_geom_idx
> (cost=0.00..5530.26 rows=174676 width=0) (actual time=5437.166..5437.166
> rows=164889 loops=1)
> Index Cond:
> ('0103000020E61000000100000005000000CE70033E3F8CFA3FE275FD82DDB04540CE70033E
> 3F8CFA3F43739D465A5E494021020EA14A4D094043739D465A5E494021020EA14A4D0940E275
> FD82DDB04540CE70033E3F8CFA3FE275FD82DDB04540'::geometry && the_geom)
> Total runtime: 56367.929 ms
>
>
> Is there a way to increase my performances in this type of select queries?
>
>
> Thanks for help
>
> ERIC
>
> My conf:
>
> Toshiba Tecra A4 with 1 Go Ram running PostgreSQl 8.2
> Database on external disk, pg_xlog on local disk
>
> shared_buffers = 228MB
> work_mem=50MB
> maintenance_work_mem=100MB
> effective_cache_size = 500MB
Hi Eric,
It looks like you've got your basic tuning done, so it's time to speak
to the PostgreSQL experts. If you haven't already done so, join the
pgsql-performance list on postgresql.org and post your query there for
more feedback.
Kind regards,
Mark.
More information about the postgis-users
mailing list