Утечка памяти при селекте из процедуры с инсертом

K!P
Дата: 21.07.2012 13:37:06
Обнаружил, что при селекте из процедуры в которй происходит вставка, происходит утечка памяти - процесс забирет больше гигабайта памяти и падает.
CREATE TABLE T (ID  INTEGER NOT NULL);
ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);

SET TERM ^ ;
ALTER PROCEDURE MAIN RETURNS (ID INTEGER)
AS
declare variable I integer = 0;
begin
  while (i < 10000000) do begin
    select id from SELPROC(:i) into :id;
    i = i + 1;
  end
  suspend;
end^

ALTER PROCEDURE SELPROC (
    P_ID INTEGER)
RETURNS (
    ID INTEGER)
AS
begin
  insert into t values (:P_id);
  id = p_id;
  suspend;
end^
SET TERM ; ^

select * from MAIN

Версия FB: 2.5 Classic 32bit
Проверял на разных Windows (XP, 7, 2008 R2)

Если селект из SELPROC заменить на
execute procedure SELPROC(:i) returning_values :id;

то память не ест.
Применение FOR SELECT также приводит к утечке.
Dzirt
Дата: 21.07.2012 17:58:25
K!P
...

Процесс занял 1,3 Гб памяти, при коммите всю ее освободил. Никто никуда не падал. Статистика выполнения:
Query
------------------------------------------------
select * from MAIN

Plan
------------------------------------------------
PLAN (SELPROC NATURAL)

Query Time
------------------------------------------------
Prepare       : 0,00 ms
Execute       : 157 810,00 ms
Avg fetch time: 157 810,00 ms

Memory
------------------------------------------------
Current: 1 148 994 488
Max    : 1 155 421 820
Buffers: 4 096

Operations
------------------------------------------------
Read   : 21
Writes : 38 056
Fetches: 66 046 501
Marks  : 20 194 616


Enchanced Info:
+--------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|        Table Name        |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges |
|                          |   Total   |   reads   |    reads    |         |         |         |          |          |          |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|                 RDB$PAGES|         0 |         0 |           0 |       0 |       0 |       7 |        0 |        0 |        0 |
|                         T|         0 |         0 |           0 |       0 |       0 | 1000000 |        0 |        0 |        0 |
+--------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+

Firebird Classic 2.5.2.26510 на Windows 7 x64.
K!P
Дата: 21.07.2012 23:23:32
Да на 10 не падает. Цикл надо до 20 млн увеличить, тогда упадет.
__Avenger__
Дата: 22.07.2012 01:10:37
Query
------------------------------------------------
select * from MAIN

Plan
------------------------------------------------
PLAN (SELPROC NATURAL)

Query Time
------------------------------------------------
Prepare       : 16,00 ms
Execute       : 603 256,00 ms
Avg fetch time: 603 256,00 ms

Memory
------------------------------------------------
Current: 0
Max    : 0
Buffers: 2 048

Operations
------------------------------------------------
Read   : 45
Writes : 203 939
Fetches: 136 604 386
Marks  : 40 450 427


Enchanced Info:
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|          Table Name           |  Records  |  Indexed  | Non-Indexed | Updates | Deletes | Inserts | Backouts |  Purges  | Expunges |
|                               |   Total   |   reads   |    reads    |         |         |         |          |          |          |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
|T                              |         0 |         0 |           0 |       0 |       0 | 2000000 |        0 |        0 |        0 |
+-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+
__Avenger__
Дата: 22.07.2012 01:14:09
Версия сервера WI-V6.3.1.26351 Firebird 2.5 x64, процесс отъел 4гб памяти.
asviridenkov
Дата: 22.07.2012 01:31:15
__Avenger__,

2 миллиона и 20 несколько отличаются
__Avenger__
Дата: 22.07.2012 01:33:45
asviridenkov
__Avenger__,

2 миллиона и 20 несколько отличаются


Это форматирование ibexpert, там 20 000 000 вставлялось.
hvlad
Дата: 22.07.2012 02:07:50
В трекер занесите пожалуйста.

Память освобождается по коммиту, т.е. реальной утечки нет,
но она может освобождаться раньше, и в этом и есть бага.
hvlad
Дата: 23.07.2012 13:01:48
В трекер я уже сам занёс (как обычно)