Re: Need advice about triggers

From: "Mindaugas Riauba" <mind(at)bi(dot)lt>
To: <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Need advice about triggers
Date: 2003-09-10 10:21:55
Message-ID: 053a01c37785$5f89d4d0$f20214ac@bite.lt
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance


> >> Well, try it without the trigger. If performance improves markedly, it
> >> might be worth rewriting in C.
>
> > Nope. Execution time is practically the same without trigger.
>
> >> If not, you're probably saturating the disk I/O -
>
> > Bottleneck in this case is CPU. postmaster process uses almost 100% of
> > CPU.
>
> That seems very odd. Updates should be I/O intensive, not CPU
> intensive. I wouldn't have been surprised to hear of a plpgsql trigger
> consuming lots of CPU, but without it, I'm not sure where the time is
> going. Can you show us an EXPLAIN ANALYZE result for a typical update
> command?

Two EXPLAIN ANALYZE below. One is before another is after REINDEX. It
seems
that REINDEX before updates helps. Time went down to ~17s. Also CPU is not
at
100%. vmstat output is below (machine is 2xCPU so 40% load means 80% on one
CPU).

So the solution would be REINDEX before updates and VACUUM at the same
time?
Without REINDEX performance slowly degrades.

Mindaugas

router_db=# explain analyze update ifdata set ifspeed=256000,
ifreason='12121', iflastupdate=CURRENT_TIMESTAMP WHERE clientid='#0003904#';
QUERY PLAN
----------------------------------------------------------------------------
------------------------------------------------
Index Scan using ifdata_clientid_key on ifdata (cost=0.00..5.64 rows=1
width=116) (actual time=0.17..0.36 rows=1 loops=1)
Index Cond: (clientid = '#0003904#'::character varying)
Total runtime: 1.70 msec
(3 rows)

router_db=# reindex table ifdata;
REINDEX
router_db=# explain analyze update ifdata set ifspeed=256000,
ifreason='12121', iflastupdate=CURRENT_TIMESTAMP WHERE clientid='#0003904#';
QUERY PLAN
----------------------------------------------------------------------------
------------------------------------------------
Index Scan using ifdata_clientid_key on ifdata (cost=0.00..5.65 rows=1
width=116) (actual time=0.06..0.07 rows=1 loops=1)
Index Cond: (clientid = '#0003904#'::character varying)
Total runtime: 0.47 msec
(3 rows)

----------------------------------------------------------------------------
---

procs memory swap io system
cpu
r b w swpd free buff cache si so bi bo in cs us sy
id
0 0 0 5048 20616 273556 1614692 0 0 4 3 2 0 0 1
3
0 0 0 5048 20612 273556 1614692 0 0 0 0 109 8 0 0
100
0 0 0 5048 20612 273556 1614692 0 0 0 168 144 20 0 0
100
1 0 0 5048 19420 273556 1614612 0 0 0 192 123 4120 35 2
63
0 1 1 5048 19420 273572 1614652 0 0 0 672 144 4139 32 2
66
1 0 0 5048 19420 273580 1614660 0 0 0 360 125 4279 33 12
55
1 0 0 5048 19420 273580 1614724 0 0 0 272 119 5887 41 2
57
1 0 0 5048 19420 273580 1614716 0 0 0 488 124 4871 40 1
59

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Magnus Naeslund(w) 2003-09-10 11:47:22 Re: Reading data in bulk - help?
Previous Message Dennis Bjorklund 2003-09-10 09:01:07 Re: Reading data in bulk - help?