I have now, over two of our setups, and I'm getting another, er, interesting 
problem.  Same statement, same data, wildly different times.  One's taking 
nearly half an hour, the other's ready within a few minutes.  It's a rather 
large database, so I'm not surprised at a little delay (although shortening 
that as much as possible is the goal), but still...
   
  Statement in question.
  select substring(ttrans.tran_dt, 1, 10) as tran_dt, ttrans.dist_id as 
dist_id, ttrans.cntrct_id as cntrct_id, cntrt.cntrtyp_cd as cntrt_type, 
cntrt.actual_amt as cntrt_amt, acntrec.mth_reck as mth_reck, persn.frst_nm as 
fnm, persn.lst_nm as lnm from ttrans, cntrt, acntrec, persn, custm, addru where 
ttrans.tran_dt >= '2007-01-01' and ttrans.tran_dt < '2007-02-01' and 
ttrans.cntrct_id = cntrt.cntrct_id and cntrt.cntrct_seq = addru.cntrct_seq and 
addru.aunit_seq = acntrec.aunit_seq and cntrt.cntrtyp_cd = 260 and 
cntrt.clnt_seq = custm.clnt_seq and custm.person_seq = persn.person_seq and 
acntrec.cd_inst = 49 and acntrec.months = 49 and cntrt.dow_flg1 = 'NO' order by 
ttrans.dist_id asc, cntrt.cntrct_id asc, cntrt.cntrct_id asc, cntrt.cntrct_id 
asc, cntrt.cntrct_id asc;
  
Results: Slow system
                                                                           
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=169629.77..169629.78 rows=1 width=91) (actual 
time=1262832.907..1262833.259 rows=120 loops=1)
   Sort Key: ttrans.dist_id, cntrt.cntrct_id
   ->  Nested Loop  (cost=0.00..169629.76 rows=1 width=91) (actual 
time=18755.330..1262808.593 rows=120 loops=1)
         Join Filter: (("inner".cntrct_id)::bpchar = "outer".cntrct_id)
         ->  Nested Loop  (cost=0.00..18902.45 rows=1 width=68) (actual 
time=369.208..20016.454 rows=65 loops=1)
               ->  Nested Loop  (cost=0.00..18897.73 rows=1 width=48) (actual 
time=347.437..15905.930 rows=65 loops=1)
                     ->  Nested Loop  (cost=0.00..18892.32 rows=1 width=48) 
(actual time=338.897..12678.319 rows=65 loops=1)
                           ->  Nested Loop  (cost=0.00..18875.15 rows=3 
width=43) (actual time=317.317..8104.591 rows=68 loops=1)
                                 ->  Seq Scan on cntrt  (cost=0.00..18857.61 
rows=3 width=43) (actual time=317.181..4249.752 rows=68 loops=1)
                                       Filter: (((cntrtyp_cd)::text = 
'260'::text) AND (dow_flg1 = 'NO'::bpchar))
                                 ->  Index Scan using fk_cntrct on addru  
(cost=0.00..5.83 rows=1 width=8) (actual time=56.661..56.666 rows=1 loops=68)
                                       Index Cond: ("outer".cntrct_seq = 
addru.cntrct_seq)
                           ->  Index Scan using fk_aunit on acntrec  
(cost=0.00..5.71 rows=1 width=13) (actual time=66.415..67.243 rows=1 loops=68)
                                 Index Cond: ("outer".aunit_seq = 
acntrec.aunit_seq)
                                 Filter: ((cd_inst = 49) AND ((months)::text = 
'49'::text))
                     ->  Index Scan using "pkeyCUSTM" on custm  
(cost=0.00..5.39 rows=1 width=8) (actual time=49.633..49.638 rows=1 loops=65)
                           Index Cond: ("outer".clnt_seq = custm.clnt_seq)
               ->  Index Scan using "pkeyPERSN" on persn  (cost=0.00..4.70 
rows=1 width=28) (actual time=63.212..63.220 rows=1 loops=65)
                     Index Cond: ("outer".person_seq = persn.person_seq)
         ->  Seq Scan on ttrans  (cost=0.00..149327.10 rows=112017 width=23) 
(actual time=163.610..18845.905 rows=86415 loops=65)
               Filter: ((tran_dt >= '2007-01-01 00:00:00-06'::timestamp with 
time zone) AND (tran_dt < '2007-02-01 00:00:00-06'::timestamp with time zone))
 Total runtime: 1262856.689 ms
(22 rows)
  
Results: 'Normal' system
                                                                               
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Sort  (cost=177304.02..177304.03 rows=1 width=125) (actual 
time=271165.198..271165.432 rows=120 loops=1)
   Sort Key: ttrans.dist_id, cntrt.cntrct_id
   ->  Nested Loop  (cost=0.00..177304.01 rows=1 width=125) (actual 
time=21612.109..270938.877 rows=120 loops=1)
         ->  Nested Loop  (cost=0.00..177299.40 rows=1 width=106) (actual 
time=21538.207..267696.943 rows=120 loops=1)
               ->  Nested Loop  (cost=0.00..177294.64 rows=1 width=106) (actual 
time=21271.967..263316.202 rows=120 loops=1)
                     Join Filter: (("inner".cntrct_id)::bpchar = 
"outer".cntrct_id)
                     ->  Nested Loop  (cost=0.00..19221.50 rows=1 width=48) 
(actual time=2057.840..25089.891 rows=65 loops=1)
                           ->  Nested Loop  (cost=0.00..19210.31 rows=2 
width=43) (actual time=1884.550..17108.249 rows=68 loops=1)
                                 ->  Seq Scan on cntrt  (cost=0.00..19199.68 
rows=2 width=43) (actual time=1590.328..8572.132 rows=68 loops=1)
                                       Filter: (((cntrtyp_cd)::text = 
'260'::text) AND (dow_flg1 = 'NO'::bpchar))
                                 ->  Index Scan using fk_cntrct on addru  
(cost=0.00..5.30 rows=1 width=8) (actual time=125.508..125.513 rows=1 loops=68)
                                       Index Cond: ("outer".cntrct_seq = 
addru.cntrct_seq)
                           ->  Index Scan using fk_aunit on acntrec  
(cost=0.00..5.59 rows=1 width=13) (actual time=117.329..117.340 rows=1 loops=68)
                                 Index Cond: ("outer".aunit_seq = 
acntrec.aunit_seq)
                                 Filter: ((cd_inst = 49) AND ((months)::text = 
'49'::text))
                     ->  Seq Scan on ttrans  (cost=0.00..157710.93 rows=28976 
width=58) (actual time=39.742..3530.494 rows=86415 loops=65)
                           Filter: ((tran_dt >= '2007-01-01 
00:00:00-06'::timestamp with time zone) AND (tran_dt < '2007-02-01 
00:00:00-06'::timestamp with time zone))
               ->  Index Scan using "pkeyCUSTM" on custm  (cost=0.00..4.75 
rows=1 width=8) (actual time=36.492..36.494 rows=1 loops=120)
                     Index Cond: ("outer".clnt_seq = custm.clnt_seq)
         ->  Index Scan using "pkeyPERSN" on persn  (cost=0.00..4.59 rows=1 
width=27) (actual time=26.973..26.981 rows=1 loops=120)
               Index Cond: ("outer".person_seq = persn.person_seq)
 Total runtime: 271175.640 ms
(22 rows)
   
  Anybody ideas what might be causing the problems with the slowdown?  The slow 
database is fed by slony logshipping from the 'normal' one, and both are (at 
least theoretically) getting vacuumed every night.  What else might be causing 
this kind of slowdown problem?

Tom Lane <[EMAIL PROTECTED]> wrote:
  Andrew Edson writes:
> I'm working on a php project that's supposed to draw information from the DB 
> for display, and I've been requested to speed up the display as much as 
> possible. I'm drawing data from four tables, with an additional two that I 
> have to 'bounce' through to match the keys together. Also, I've got five 
> direct filtering requirements, four of the 'value = X' type and a date range.

> My question is this: Would shuffling the placement of the filtering
> requirements (t1.some_key = t2.some_key and t1.some_other_value = X,
> etc.) make a difference in processing speed for the response time?

No; certainly it will make no difference how you shuffle clauses that
involve different sets of tables. If you've got clauses that wind up in
the same "Filter:" condition in the generated plan, and some of them
involve expensive functions, it might be useful to shuffle the
expensive-to-evaluate ones to the end. But in most cases that's just
micro-optimization. Usually what you want to think about for something
like this is plan optimization, ie, what order are the tables joined in
and with what join methods. Have you looked at EXPLAIN ANALYZE results
for the query?

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster


 
---------------------------------
Bored stiff? Loosen up...
Download and play hundreds of games for free on Yahoo! Games.

Reply via email to