Доброго времени суток!

Обнаружил, что после выполнения одной из процедур сервер (Windows
2000, CS, 1-й dialect, FW OFF) не освобождает память. В процедуре
выполняется update всей таблицы и после него повторные
непересекающиеся update (думаю, я это переделаю, но пока так)
Получаем
Start Transaction:
consistency
no_auto_undo
nowait

select * from rdb$database
PLAN (RDB$DATABASE NATURAL)
-----Statistics-----
Reads = 1
Writes = 0
Fetches = 53
Marks = 0
CurrentMemory = 25806644
MaxMemory = 25933764
NumBuffers = 3000
-----Detail statistics-----
read_idx_count
RDB$FIELDS                      = 4
RDB$RELATION_FIELDS             = 8
RDB$RELATIONS                   = 3
read_seq_count
RDB$DATABASE                    = 1
-----End------
execute procedure s_check_source_direction(1,1)
-----Statistics-----
Reads = 36631
Writes = 24668
Fetches = 13267621
Marks = 3747060
CurrentMemory = 94036964
MaxMemory = 95235360
NumBuffers = 3000
-----Detail statistics-----
insert_count
RDB$PAGES                       = 1
read_idx_count
RDB$FIELDS                      = 11
RDB$INDICES                     = 14
RDB$RELATIONS                   = 9
RDB$FORMATS                     = 2
RDB$SECURITY_CLASSES            = 6
RDB$TRIGGERS                    = 9
RDB$FUNCTIONS                   = 2
RDB$FUNCTION_ARGUMENTS          = 6
RDB$PROCEDURES                  = 5
RDB$PROCEDURE_PARAMETERS        = 14
RDB$CHARACTER_SETS              = 1
RDB$COLLATIONS                  = 1
SESSION_TABLES                  = 1
read_seq_count
CALLS                           = 2090905
update_count
CALLS                           = 1454889
-----End------
select * from rdb$database
PLAN (RDB$DATABASE NATURAL)
-----Statistics-----
Reads = 2
Writes = 0
Fetches = 5
Marks = 0
CurrentMemory = 94040084
MaxMemory = 95235360
NumBuffers = 3000
-----Detail statistics-----
read_seq_count
RDB$DATABASE                    = 1
-----End------
Commit Transaction
Start Transaction:
consistency
no_auto_undo
nowait
select * from rdb$database
PLAN (RDB$DATABASE NATURAL)
-----Statistics-----
Reads = 0
Writes = 0
Fetches = 5
Marks = 0
CurrentMemory = 94038440
MaxMemory = 95235360
NumBuffers = 3000
-----Detail statistics-----
read_seq_count
RDB$DATABASE                    = 1
-----End------
Commit Transaction

Обратите внимание на величину CurrentMemory - она не изменяется ни
после выполнения процедуры, ни после завершения транзакции. Это
нормально?
(Если нужен воспроизводимый пример, то чуть попозже).
Если все update в процедуре формировать динамически, через ES, то
такого эффекта не наблюдается.

С уважением, Евгений

Ответить