From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Андрей Хозов <avkhozov(at)gmail(dot)com> |
Cc: | "pgsql-performance(at)postgresql(dot)org" <pgsql-performance(at)postgresql(dot)org> |
Subject: | Re: Performance issue with castings args of the function |
Date: | 2017-01-02 15:17:14 |
Message-ID: | CAFj8pRCDfpMe00GyX-wpfbveyvmvBuy-s2PhcSnO+PGaDLiU+w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Hi
2017-01-02 15:34 GMT+01:00 Андрей Хозов <avkhozov(at)gmail(dot)com>:
> Hello there!
>
> I have an performance issue with functions and args type.
>
> Table and data:
> create table t1 (id serial, str char(32));
> insert into t1 (str) select md5(s::text) from generate_series(1, 1000000)
> as s;
>
> And simple functions:
> create function f1(line text) returns void as $$
> begin
> perform * from t1 where str = line;
> end;
> $$ language plpgsql;
>
> create function f2(line char) returns void as $$
> begin
> perform * from t1 where str = line;
> end;
> $$ language plpgsql;
>
> Query:
> test=> explain analyze select f2('2b00042f7481c7b056c4b410d28f33cf');
> QUERY PLAN
>
> ------------------------------------------------------------
> ----------------------------
> Result (cost=0.00..0.26 rows=1 width=0) (actual time=189.008..189.010
> rows=1 loops=1)
> Planning time: 0.039 ms
> Execution time: 189.039 ms
> (3 rows)
>
> Time: 189,524 ms
> test=> explain analyze select f1('2b00042f7481c7b056c4b410d28f33cf');
> QUERY PLAN
>
> ------------------------------------------------------------
> ----------------------------
> Result (cost=0.00..0.26 rows=1 width=0) (actual time=513.734..513.735
> rows=1 loops=1)
> Planning time: 0.024 ms
> Execution time: 513.757 ms
> (3 rows)
>
> Time: 514,125 ms
> test=> explain analyze select f1('2b00042f7481c7b056c4b410d2
> 8f33cf'::char(32));
> QUERY PLAN
>
> ------------------------------------------------------------
> ----------------------------
> Result (cost=0.00..0.26 rows=1 width=0) (actual time=513.507..513.509
> rows=1 loops=1)
> Planning time: 0.074 ms
> Execution time: 513.535 ms
> (3 rows)
>
This explain shows nothing - you need to use nested explain
look on auto-explain
https://www.postgresql.org/docs/current/static/auto-explain.html
Maybe index was not used due different types.
Regards
Pavel
> Time: 514,104 ms
> test=>
>
> Seems that casting param from text to char(32) needs to be done only once
> and f1 and f2 must be identical on performance. But function f2 with text
> param significantly slower, even with casting arg while pass it to function.
>
> Tested postgresql versions 9.5.5 and 9.6.1 on Ubuntu 16.04. It's normal
> behavior or it's can be fixed?
>
> --
> Andrey Khozov
>
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2017-01-02 16:36:20 | Re: Performance issue with castings args of the function |
Previous Message | Андрей Хозов | 2017-01-02 14:34:49 | Performance issue with castings args of the function |