Обсуждение: Slow query-plan generation (fast query) PG 9.2
Hi. I have a strange situation where generating the query plan takes 6s+ and executing it takes very little time. 2013-09-03 09:19:38.726 db=# explain select table.id from db.table left join db.tablepro on db.id = tablepro.table_id where table.fts @@ to_tsquery('english','q12345') ; QUERY PLAN ------------------------------------------------------------------------------------------------------------------- Nested Loop Left Join (cost=43.71..12711.39 rows=2930 width=4) -> Bitmap Heap Scan on sequence (cost=43.71..4449.10 rows=2930 width=4) Recheck Cond: (fts @@ '''q12345'''::tsquery) -> Bitmap Index Scan on table_gin_idx (cost=0.00..42.98 rows=2930 width=0) Index Cond: (fts @@ '''q12345'''::tsquery) -> Index Only Scan using tablepro_seqid_idx on tablepro (cost=0.00..2.81 rows=1 width=4) Index Cond: (tablepro_id = table.id) (7 rows) Time: 10458.404 ms The query gives 4 rows out of 50.000.000, so the query-plan is actually correct and as expected. Any suggestions? Jesper
On 09/03/2013 03:46 PM, jesper@krogh.cc wrote: > Hi. > > I have a strange situation where generating the query plan takes 6s+ and > executing it takes very little time. How do you determine that it's planning time at fault here? Please take separate timing for: PREPARE testq AS select table.id from db.table left join db.tablepro on db.id = tablepro.table_id where table.fts @@ to_tsquery('english','q12345') ; and then: EXPLAIN ANALYZE EXECUTE testq; -- Craig Ringer http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
On 03/09/13 09:47, Craig Ringer wrote:
Not that I'm sure, but the timing I send were only for "explain" not "explain analyze". The database is constantly updating and at the moment i cannot reproduce it any more. But at the time I picked the numbers it were very reproducible.. (tried 10+ times over 15 minutes).On 09/03/2013 03:46 PM, jesper@krogh.cc wrote:Hi. I have a strange situation where generating the query plan takes 6s+ and executing it takes very little time.How do you determine that it's planning time at fault here?
Please take separate timing for: PREPARE testq AS select table.id from db.table left join db.tablepro on db.id = tablepro.table_id where table.fts @@ to_tsquery('english','q12345') ; and then: EXPLAIN ANALYZE EXECUTE testq;I'll try to do that if i see the problem re-occour. I'm just very interested in what explain then does if it is not only the time for the query plan. When I did try the "PREPARE / EXECUTE" dance as you described .. i didnt see the prepare state take time, which seems to be consistent with that the planning time is in the EXECUTE step according to the documentation.
--
Jesper
On Tue, Sep 3, 2013 at 2:34 PM, Jesper Krogh <jesper@krogh.cc> wrote: > On 03/09/13 09:47, Craig Ringer wrote: > > On 09/03/2013 03:46 PM, jesper@krogh.cc wrote: > > Hi. > > I have a strange situation where generating the query plan takes 6s+ and > executing it takes very little time. > > How do you determine that it's planning time at fault here? > > Not that I'm sure, but the timing I send were only for "explain" not > "explain analyze". The database is constantly updating and at the moment i > cannot reproduce it any more. But at the time I picked the numbers it were > very reproducible.. (tried 10+ times over 15 minutes). Maybe your explain was blocking on locks? merlin