Re: Interesting case of IMMUTABLE significantly hurting performance - Mailing list pgsql-performance

From Pavel Stehule
Subject Re: Interesting case of IMMUTABLE significantly hurting performance
Date
Msg-id CAFj8pRBF3Qr7WtQwO1H_WN=hhFGk0semwhdE+ODz3iyv-TroMQ@mail.gmail.com
Whole thread Raw
In response to Interesting case of IMMUTABLE significantly hurting performance  (Craig Ringer <craig@2ndquadrant.com>)
Responses Re: Interesting case of IMMUTABLE significantly hurting performance  (Craig Ringer <craig@2ndquadrant.com>)
List pgsql-performance



2013/8/14 Craig Ringer <craig@2ndquadrant.com>
Hi folks

I've run into an interesting Stack Overflow post where the user shows
that marking a particular function as IMMUTABLE significantly hurts the
performance of a query.

http://stackoverflow.com/q/18220761/398670

CREATE OR REPLACE FUNCTION
  to_datestamp_immutable(time_int double precision) RETURNS date AS $$
  SELECT date_trunc('day', to_timestamp($1))::date;
$$ LANGUAGE SQL IMMUTABLE;

With IMMUTABLE:  33060.918
With STABLE:     6063.498

The plans are the same for both, though the cost estimate for the
IMMUTABLE variant is (surprisingly) massively higher.

The question contains detailed instructions to reproduce the issue, and
I can confirm the same results on my machine.

It looks like the difference is created by to_timestamp , in that if
to_timestamp is replaced with interval maths the difference goes away.

I'm very curious and am doing a quick profile now, but I wanted to raise
this on the list for comment/opinions, since it's very
counter-intuitive. IIRC docs don't suggest that IMMUTABLE can ever be
more expensive.


If I understand, a used IMMUTABLE flag disables inlining. What you see, is SQL eval overflow.

My rule is - don't use flags in SQL functions, when it is possible.

Pavel
 

--
 Craig Ringer                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services


--
Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance

pgsql-performance by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Interesting case of IMMUTABLE significantly hurting performance
Next
From: Craig Ringer
Date:
Subject: Re: Interesting case of IMMUTABLE significantly hurting performance