pá 23. 8. 2019 v 11:05 odesílatel Konstantin Knizhnik < k.knizh...@postgrespro.ru> napsal:
> > > On 22.08.2019 18:56, Pavel Stehule wrote: > > > > čt 22. 8. 2019 v 17:51 odesílatel Konstantin Knizhnik < > k.knizh...@postgrespro.ru> napsal: > >> Some more information... >> First of all I found out that marking PL/pgSQL function as immutable >> significantly increase speed of its execution: >> 19808 ms vs. 27594. It happens because exec_eval_simple_expr is taken >> snapshot if function is volatile (default). >> I wonder if PL/pgSQL compiler can detect that evaluated expression itself >> is actually immutable and there is no need to take snapshot >> for each invocation of this function. Also I have tried yet another PL >> language - JavaScript, which is now new outsider, despite to the fact that >> v8 JIT compiler is very good. >> > > I have a plan to do some work in this direction. Snapshot is not necessary > for almost buildin functions. If expr calls only buildin functions, then > probably can be called without snapshot and without any work with plan > cache. > > > I wonder if the following simple patch is correct? > You cannot to believe to user defined functions so immutable flag is correct. Only buildin functions are 100% correct. CREATE OR REPLACE FUNCTION foo() RETURNS int AS $$ SELECT count(*) FROM pg_class; $$ LANGUAGE sql IMMUTABLE; is working. But your patch is good enough for benchmarking. Pavel > > -- > Konstantin Knizhnik > Postgres Professional: http://www.postgrespro.com > The Russian Postgres Company > >