Re: Need advice about triggers - Mailing list pgsql-performance
From | Mindaugas Riauba |
---|---|
Subject | Re: Need advice about triggers |
Date | |
Msg-id | 053a01c37785$5f89d4d0$f20214ac@bite.lt Whole thread Raw |
In response to | Need advice about triggers ("Mindaugas Riauba" <mind@bi.lt>) |
Responses |
Re: Need advice about triggers
|
List | 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
pgsql-performance by date: