[pkg-firebird-general] Bug#693202: high memory usage when PSQL selects from stored procedure modifying data
Damyan Ivanov
dmn at debian.org
Wed Nov 14 08:57:57 UTC 2012
Source: firebird2.5
Version: 2.5.1
Severity: important
Tags: upstream fixed-upstream
Forwarded: http://tracker.firebirdsql.org/browse/CORE-3895
When a code in a stored procedure selects from another stored procedure which
modifies a table via UPDATE, memory is consumed on every invocation.
Test case from usptream bug report:
1. create metadata
create table t (id integer not null);
set term ^;
create or alter procedure selproc (p_id integer) returns (id integer)
AS
begin
insert into t values (:p_id);
id = p_id;
suspend;
end
^
create or alter procedure main returns (id integer)
as
declare I integer = 0;
begin
while (i < 1000) do begin
select id from selproc(:i) into :id;
i = i + 1;
end
suspend;
end
^
set term ;^
2. run test and look at memory usage (below i removed not needed stats)
SQL> set stat on;
SQL> select * from main;
ID
============
999
Current memory = 4852448
Delta memory = 257764
Max memory = 4859608
SQL> select * from main;
ID
============
999
Current memory = 4961764
Delta memory = 109316
Max memory = 4974260
SQL> select * from main;
ID
============
999
Current memory = 5071132
Delta memory = 109368
Max memory = 5081956
you see - memory usage is incremented at each run by 109368 bytes
SQL> commit;
Current memory = 4735108
Delta memory = -336024
Max memory = 5081956
memory is returned on commit, while it shoud be returned at the statement
execution finish.
If "select from selproc" is replaced by "execute procedure selproc" then there
is no such high memory usage.
More information about the pkg-firebird-general
mailing list