pá 12. 1. 2024 v 10:27 odesílatel Pavel Stehule <pavel.steh...@gmail.com> napsal:
> Hi > > I have reported very memory expensive pattern: > > CREATE OR REPLACE FUNCTION public.fx(iter integer) > RETURNS void > LANGUAGE plpgsql > AS $function$ > declare > c cursor(m bigint) for select distinct i from generate_series(1, m) g(i); > t bigint; > s bigint; > begin > for i in 1..iter > loop > open c(m := i * 10000); > s := 0; > loop > fetch c into t; > exit when not found; > s := s + t; > end loop; > close c; raise notice '%=%', i, s; > end loop; > end; > $function$ > ; > > This script takes for 100 iterations 100MB > > but rewritten > > CREATE OR REPLACE FUNCTION public.fx(iter integer) > RETURNS void > LANGUAGE plpgsql > AS $function$ > declare > t bigint; > s bigint; > begin > for i in 1..iter > loop > s := 0; > for t in select ic from generate_series(1, i * 10000) g(ic) > loop > s := s + t; > end loop; > raise notice '%=%', i, s; > end loop; > end; > $function$ > > takes lot of megabytes of memory too. > The megabytes leaks are related to JIT. With JIT off the memory consumption is significantly less although there are some others probably. regards Pavel > Regards > > Pavel >