Thread: time penalties on triggers?

time penalties on triggers?

From
"Jan Theodore Galkowski"
Date:
Does anyone know, or can anyone point to information about how much
triggers penalize inserts in PG tables?  I'm getting a report that it is
substantial, and before I investigate more.  The triggers in question
look like:
#
# CREATE OR REPLACE FUNCTION touch_lasttouched() RETURNS TRIGGER AS
$touch_lasttouched$
#   BEGIN
#     NEW.lasttouched = NOW();
#     RETURN NEW;
#   END;
# $touch_lasttouched$ LANGUAGE plpgsql;

#
# DROP TRIGGER IF EXISTS trigger_touch_ams_faults_data ON
ams_faults_and_failures_data;
#
# CREATE TRIGGER trigger_touch_ams_faults_data
#   BEFORE INSERT OR UPDATE
#   ON ams_faults_and_failures_data
#   FOR EACH ROW
#     EXECUTE PROCEDURE touch_lasttouched();
#

Here the "lasttouched" column of a table is like:
#
#    lasttouched TIMESTAMP(6)
#

and is intentionally left nullable.

Re: time penalties on triggers?

From
"Scott Marlowe"
Date:
On 10/4/07, Jan Theodore Galkowski <bayesianlogic@acm.org> wrote:
> Does anyone know, or can anyone point to information about how much
> triggers penalize inserts in PG tables?  I'm getting a report that it is
> substantial, and before I investigate more.

Using your DDL, with slight variations, I came up with this:

create table ttest2 (i serial, lasttouched timestamp);
\timing
 first test with no primary key and no now():
Time: 414.226 ms
-- now with primary key:
Time: 1180.121 ms
-- No pk, with now:
Time: 792.013 ms
-- pk and now():
1240.343 ms

-- Now with a trigger, primary key, and of course now() from the trigger:
4823.051 ms

The basic rule of thumb is that if you need fast triggers, you write them in C.

Re: time penalties on triggers?

From
Kenneth Downs
Date:
Jan Theodore Galkowski wrote:
> Does anyone know, or can anyone point to information about how much
> triggers penalize inserts in PG tables?  I'm getting a report that it is
> substantial, and before I investigate more.  The triggers in question
> look like:
>

I use triggers everywhere.  About a year ago I did some very simple
tests, 1000's of inserts to tables, then 1000s of inserts to the same
tables with all triggers disabled.

What I found was that the largest factor in performance was the size of
the row being inserted.  This makes sense since Postgres uses MVCC.

I also found it very hard to pin down the penalty of the trigger, but
came up with rough figures of 30-50% overhead.  The complexity of the
trigger did not matter.

This all made sense based on the fact that writing to disk takes
infinitely more time than processing trigger code, so the penalty seems
to come into play as overhead in firing the trigger.





--
Kenneth Downs
Secure Data Software, Inc.
www.secdat.com    www.andromeda-project.org
631-689-7200   Fax: 631-689-0527
cell: 631-379-0010


Re: time penalties on triggers?

From
Vivek Khera
Date:
On Oct 5, 2007, at 9:10 AM, Kenneth Downs wrote:

> I also found it very hard to pin down the penalty of the trigger,
> but came up with rough figures of 30-50% overhead.  The complexity
> of the trigger did not matter.

in which language did you write your triggers?