Re: Invocation overhead for procedural languages - Mailing list pgsql-general

From Pavel Stehule
Subject Re: Invocation overhead for procedural languages
Date
Msg-id 162867790808060704m643ed8c2i7dcb1e0bcd114128@mail.gmail.com
Whole thread Raw
In response to Invocation overhead for procedural languages  (Giorgio Valoti <giorgio_v@mac.com>)
Responses Re: Invocation overhead for procedural languages  (Giorgio Valoti <giorgio_v@mac.com>)
List pgsql-general
2008/8/6 Giorgio Valoti <giorgio_v@mac.com>:
> Hi all, I think I've read somewhere in the documentation that the invocation
> of functions written in procedural languages (with the exception of plpgsql)
> incur in performance hit due to the call the language interpreter. Is that
> correct or am I completely off track?

it's depend. Start of interpret is only one overhead. Other is date
conversions to language compatible types (without C and plpgsql).
Only plpgsql share expression evaluation with database, so it's
specific overhead only for plpgsql.

postgres=# create function testpg(a integer) returns integer as
$$begin return 1; end; $$ language plpgsql immutable;
CREATE FUNCTION
postgres=# create function testperl(a integer) returns integer as
$$return 1;$$ language plperl;
CREATE FUNCTION

postgres=# select sum(testperl(i)) from generate_series(1,10000) g(i);
  sum
-------
 10000
(1 row)

Time: 588,649 ms
postgres=# select sum(testpg(i)) from generate_series(1,10000) g(i);
  sum
-------
 10000
(1 row)

Time: 51,214 ms

so in this trivial function is plpgql faster then perl, that is fata morgana :).

first start is diferent:
postgres=# select testpg(1);
 testpg
--------
      1
(1 row)

Time: 3,409 ms
postgres=# select testperl(1);
 testperl
----------
        1
(1 row)

Time: 86,199 ms
second is similar
postgres=# select testperl(1);
 testperl
----------
        1
(1 row)

Time: 1,059 ms
postgres=# select testpg(1);
 testpg
--------
      1
(1 row)

Time: 0,955 ms

but you can load perl after server start - look on preload_libraries
section in postgresql.conf

regards
Pavel Stehule

>
> Thank you in advance
> --
> Giorgio Valoti
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

pgsql-general by date:

Previous
From: Martin Gainty
Date:
Subject: Re: Invocation overhead for procedural languages
Next
From: Tom Lane
Date:
Subject: Re: bytea encode performance issues