Re: Quick select, slow update - help with performance problems - Mailing list pgsql-sql

From Gary Stainburn
Subject Re: Quick select, slow update - help with performance problems
Date
Msg-id 200807011342.15571.gary.stainburn@ringways.co.uk
Whole thread Raw
In response to Re: Quick select, slow update - help with performance problems  (Richard Huxton <dev@archonet.com>)
List pgsql-sql
On Tuesday 01 July 2008 12:17, Richard Huxton wrote:
> Gary Stainburn wrote:
> > update used_diary set
> >     ud_valet_completed=now(), ud_valet_completed_by=25
> >     where ud_valet_completed is null and
> >         ud_valet_required < CURRENT_DATE-'7 days'::interval
> >
> > is still running after approx 1 1/2 minutes.  I've noticed that other
> > updates also seem to take a long time.
>
> Do you have any foreign keys referencing used_diary? Do they have the
> correct indexes on the referencing tables?
> Any on-update triggers?
>

After about 5 minutes I Ctrl+C'd and then re-sent the update and it completed 
in about 5 seconds, so I don't know what happened there.

Below is the \d for the table. I can't see how updating those two fields would 
cause a problem though.

I've also included the explain, which looks very straight-forward

goole=# \d used_diary                                                  Table "public.used_diary"         Column
 |            Type             |        Modifiers
 
---------------------------+-----------------------------+---------------------
-------------------------------------------------ud_id                     | integer                     | not null
default
 
nex
tval(('"used_diary_ud_id_seq"'::text)::regclass)ud_d_id                   | integer                     | not
nullud_registration          | character varying(12)       |ud_stock                  | character varying(7)
|ud_name                  | character varying(50)       |ud_required               | date
|ud_rfl                   | character varying(25)       |ud_comments               | text
|ud_created               | timestamp with time zone    | default now()ud_completed              | timestamp with time
zone   |ud_u_id                   | integer                     | not nullud_completed_by           | integer
         |ud_dd_id                  | integer                     | not null default 6ud_authorized             |
timestampwithout time zone |ud_authorized_by          | integer                     |ud_tab                    |
integer                    |ud_tos_id                 | integer                     |ud_debt                   |
numeric(7,2)               |ud_m_id                   | integer                     |ud_cc_id                  |
character(2)               |ud_required_time          | character varying(5)        |ud_tr_id                  |
integer                    |ud_pex_exists             | boolean                     |ud_pex_registration       |
charactervarying(12)       |ud_pex_make_model         | character varying(40)       |ud_valet_instructions     | text
                    |ud_valet_completed        | timestamp without time zone |ud_valet_completed_by     | integer
             |ud_pex_valet_completed    | timestamp without time zone |ud_pex_valet_completed_by | integer
      |ud_pex_valet_option       | integer                     |ud_pex_valet_instructions | text
|ud_do_valet              | boolean                     | default trueud_valet_required         | date
     |ud_handover_date          | date                        |ud_phone_no               | character varying(20)
|ud_valet_site            | integer                     |ud_ps_id                  | integer
|ud_partex_prep           | text                        |
 
Indexes:   "used_diary_pkey" PRIMARY KEY, btree (ud_id)   "used_diary_completed_index" btree (ud_completed)
"used_diary_dealer_index"btree (ud_d_id)   "used_diary_dept_index" btree (ud_dd_id)   "used_diary_handover_date" btree
(ud_handover_date)  "used_diary_ps_id" btree (ud_ps_id)   "used_diary_reg_index" btree (ud_registration)
"used_diary_required"btree (ud_required)   "used_diary_stock_index" btree (ud_stock)
"used_diary_ud_pex_valet_completed"btree (ud_pex_valet_completed)   "used_diary_ud_valet_completed" btree
(ud_valet_completed)  "used_diary_valet_required" btree (ud_valet_required)
 
Foreign-key constraints:   "used_diary_ud_authorized_by_fkey" FOREIGN KEY (ud_authorized_by) 
REFERENCE
S users(u_id)   "used_diary_ud_cc_id_fkey" FOREIGN KEY (ud_cc_id) REFERENCES 
contract_codes
(cc_id)   "used_diary_ud_dd_id_fkey" FOREIGN KEY (ud_dd_id) REFERENCES 
diary_departme
nts(dd_id)   "used_diary_ud_m_id_fkey" FOREIGN KEY (ud_m_id) REFERENCES 
stock_makes(m_id
)   "used_diary_ud_pex_valet_completed_by_fkey" FOREIGN KEY 
(ud_pex_valet_compl
eted_by) REFERENCES users(u_id)   "used_diary_ud_pex_valet_option_fkey" FOREIGN KEY (ud_pex_valet_option) 
REF
ERENCES diary_valet_options(dv_id)   "used_diary_ud_ps_id_fkey" FOREIGN KEY (ud_ps_id) REFERENCES 
partex_state(p
s_id)   "used_diary_ud_tab_fkey" FOREIGN KEY (ud_tab) REFERENCES tax_tabs(tt_id)   "used_diary_ud_tos_id_fkey" FOREIGN
KEY(ud_tos_id) REFERENCES 
 
type_of_sale
(tos_id)   "used_diary_ud_tr_id_fkey" FOREIGN KEY (ud_tr_id) REFERENCES 
tax_rfl_values
(tr_id)   "used_diary_ud_valet_completed_by_fkey" FOREIGN KEY 
(ud_valet_completed_by)REFERENCES users(u_id)   "used_diary_ud_valet_site_fkey" FOREIGN KEY (ud_valet_site) REFERENCES

deal
erships(d_id)
Triggers:   "RI_ConstraintTrigger_110488" AFTER INSERT OR UPDATE ON used_diary FROM 
dea
lerships NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_
FKey_check_ins"('<unnamed>', 'used_diary', 'dealerships', 'UNSPECIFIED', 'ud_d_
id', 'd_id')   "RI_ConstraintTrigger_110491" AFTER INSERT OR UPDATE ON used_diary FROM 
use
rs NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_c
heck_ins"('<unnamed>', 'used_diary', 'users', 'UNSPECIFIED', 'ud_u_id', 'u_id')   "RI_ConstraintTrigger_110494" AFTER
INSERTOR UPDATE ON used_diary FROM 
 
use
rs NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_c
heck_ins"('<unnamed>', 'used_diary', 'users', 'UNSPECIFIED', 'ud_completed_by','u_id')   "RI_ConstraintTrigger_110501"
AFTERDELETE ON used_diary FROM 
 
used_diary_lo
g NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_no
action_del"('<unnamed>', 'used_diary_log', 'used_diary', 'UNSPECIFIED', 'ul_ud_
id', 'ud_id')   "RI_ConstraintTrigger_110502" AFTER UPDATE ON used_diary FROM 
used_diary_lo
g NOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_no
action_upd"('<unnamed>', 'used_diary_log', 'used_diary', 'UNSPECIFIED', 'ul_ud_
id', 'ud_id')   "RI_ConstraintTrigger_110504" AFTER DELETE ON used_diary FROM 
used_commentsNOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_noa
ction_del"('<unnamed>', 'used_comments', 'used_diary', 'UNSPECIFIED', 'uco_ud_i
d', 'ud_id')   "RI_ConstraintTrigger_110505" AFTER UPDATE ON used_diary FROM 
used_commentsNOT DEFERRABLE INITIALLY IMMEDIATE FOR EACH ROW EXECUTE 
PROCEDURE "RI_FKey_noa
ction_upd"('<unnamed>', 'used_comments', 'used_diary', 'UNSPECIFIED', 'uco_ud_i
d', 'ud_id')

goole=#   explain update used_diary set ud_valet_completed=now(), 
ud_valet_completed_by=25 where ud_valet_completed is null and 
ud_valet_required < CURRENT_DATE-'7 days'::interval;                                       QUERY PLAN
         
 
-------------------------------------------------------------------------------------------Bitmap Heap Scan on
used_diary (cost=18.43..408.49 rows=585 width=318)  Recheck Cond: (ud_valet_required < (('now'::text)::date - '7 
 
days'::interval))  Filter: (ud_valet_completed IS NULL)  ->  Bitmap Index Scan on used_diary_valet_required
(cost=0.00..18.43
 
rows=979 width=0)        Index Cond: (ud_valet_required < (('now'::text)::date - '7 
days'::interval))
(5 rows)



-- 
Gary Stainburn
This email does not contain private or confidential material as it
may be snooped on by interested government parties for unknown
and undisclosed purposes - Regulation of Investigatory Powers Act, 2000     


pgsql-sql by date:

Previous
From: Richard Huxton
Date:
Subject: Re: Quick select, slow update - help with performance problems
Next
From: "Dhanushka Samarakoon"
Date:
Subject: Need a sample Postgre SQL script