Re: [GENERAL] Huge backends / self joins / long queries - Mailing list pgsql-general
From | Jérome Knöbl |
---|---|
Subject | Re: [GENERAL] Huge backends / self joins / long queries |
Date | |
Msg-id | 37BD0C07.27DE4DB0@mandanet.ch Whole thread Raw |
In response to | Huge backends / self joins / long queries (Dirk Lutzebaeck <lutzeb@aeccom.com>) |
List | pgsql-general |
Hello, I had the same trouble! And It's why I install the version 6.5 of postgres. In the 6.4, you cannot make some INTERSECT. Try to use the Intersection It's very powerfull JK Dirk Lutzebaeck wrote: > Hi, > > I don't know if this fits into the current thread but I have also a > problem with backends growing up to 100MB and more. This is on 6.5: > > CREATE TABLE docobj ( > envelope OID NOT NULL, > docspec OID, > docindex INTEGER, > attrid INTEGER, > val_int INTEGER, > val_str TEXT > ); > > This table saves values with differnet base types for doing self > joins. A typical select is the following: > > SELECT DISTINCT d0.envelope, d0.docindex > FROM envelope e0, docobj d0, > envelope e1, docobj d1, > envelope e2, docobj d2, > envelope e3, docobj d3 > WHERE d0.docspec=734675 AND d0.envelope=e0.oid AND d0.attrid=0 AND > d0.val_int='700050' AND d0.docindex=d0.docindex AND e0.oid=e0.oid AND > > d1.docspec=734675 AND d1.envelope=e1.oid AND d1.attrid=1 AND > d1.val_str='01' AND d1.docindex=d0.docindex AND e1.oid=e0.oid AND > > d2.docspec=734675 AND d2.envelope=e2.oid AND d2.attrid=5 AND > d2.val_str='00' AND d2.docindex=d0.docindex AND e2.oid=e0.oid AND > > d3.docspec=734675 AND d3.envelope=e3.oid AND d3.attrid=6 AND > d3.val_str='UG' AND d3.docindex=d0.docindex AND e3.oid=e0.oid > > ORDER BY boxinfo.time DESC > > Indices are generated on all joined attributes. > > This particular select needs 38MB on the backend. There is not much > data. Docobj has 1300 rows. This query is a bit of a fake. The real > query takes some additional joins with other tables. So the > backend reaches 100Mb. > > I have also set pg_geqo to > > Pool_Size 128 > Effort low > Generations 200 > Random_Seed 830518260 > Selection_Bias 1.750000 > > EXPLAIN on the query above gives: > > Unique (cost=59.40 rows=1000 width=52) > -> Sort (cost=59.40 rows=1000 width=52) > -> Nested Loop (cost=59.40 rows=1000 width=52) > -> Nested Loop (cost=16.40 rows=1 width=48) > -> Index Scan using docobj_spec_index on docobj d2 (cost=2.05 rows=1 width=8) > -> Seq Scan (cost=14.35 rows=2 width=40) > -> ??? (cost=14.35 rows=2 width=40) > -> Nested Loop (cost=14.35 rows=2 width=40) > -> Nested Loop (cost=12.30 rows=1 width=36) > -> Index Scan using docobj_spec_index on docobj d3 (cost=2.05 rows=1 width=8) > -> Seq Scan (cost=10.25 rows=2 width=28) > -> ??? (cost=10.25 rows=2 width=28) > -> Nested Loop (cost=10.25 rows=2 width=28) > -> Nested Loop (cost=8.20 rows=1 width=24) > -> Nested Loop (cost=6.15 rows=1 width=20) > -> Index Scan using docobj_spec_index on docobj d0 (cost=2.05 rows=1 width=8) > -> Seq Scan (cost=4.10 rows=2 width=12) > -> ??? (cost=4.10 rows=2 width=12) > -> Nested Loop (cost=4.10 rows=2 width=12) > -> Index Scan using docobj_spec_index on docobj d1 (cost=2.05 rows=1 width=8) > -> Index Scan using envelope_oid_index on envelope e1 (cost=2.05 rows=1000width=4) > -> Index Scan using envelope_oid_index on envelope e0 (cost=2.05 rows=101 width=4) > -> Index Scan using envelope_oid_index on envelope e3 (cost=2.05 rows=1000 width=4) > -> Index Scan using envelope_oid_index on envelope e2 (cost=2.05 rows=1000 width=4) > -> Seq Scan on boxinfo (cost=43.00 rows=1000 width=4) > > So, I guess it has something todo with the optimizer. What should I do? > > Thanks for help, > > Dirk > > ************
pgsql-general by date: