From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: plpgsql memory leaks |
Date: | 2024-01-12 10:02:14 |
Message-ID: | CAFj8pRATsUvX0j8g9GcXC8N_9w-igEwuBqjAcbrZhL8Jq6uDZw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
pá 12. 1. 2024 v 10:27 odesílatel Pavel Stehule <pavel(dot)stehule(at)gmail(dot)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
>
From | Date | Subject | |
---|---|---|---|
Next Message | Bharath Rupireddy | 2024-01-12 10:05:57 | Re: A failure in t/038_save_logical_slots_shutdown.pl |
Previous Message | Alvaro Herrera | 2024-01-12 09:58:21 | Re: alter table add x wrong error position |