Добрый день,
Сейчас эксперементирую с одной базой. Создаю-удаляю
таблички и триггеры. И вот что заметил -- удаление
полтысячи таблиц с помощью блока:
execute block
as
declare variable tn varchar(31) character set unicode_fss;
declare variable rn varchar(31) character set unicode_fss;
begin
for select rdb$trigger_name from rdb$triggers
where rdb$trigger_name LIKE 'GR2$%'
into :tn
do begin
execute statement 'DROP TRIGGER ' || :tn;
end
for select rdb$relation_name from rdb$relations
where rdb$relation_name LIKE 'GR2$%'
into :rn
do begin
execute statement 'DROP TABLE ' || :rn;
end
execute statement 'DROP GENERATOR gr2$gseq';
end
ощутимо подвисает. сначала на самом выполнении, а потом и
на комите транзакции.
Статистика по запросу такая:
В таблице RDB$RELATION_FIELDS изменено записей: 16619
Из таблицы RDB$FIELDS удалено записей: 6445
Из таблицы RDB$RELATION_FIELDS удалено записей: 6445
Из таблицы RDB$RELATIONS удалено записей: 552
Из таблицы RDB$SECURITY_CLASSES удалено записей: 552
Из таблицы RDB$TRIGGERS удалено записей: 2755
Из таблицы RDB$USER_PRIVILEGES удалено записей: 2760
Из таблицы RDB$GENERATORS удалено записей: 1
Из таблицы RDB$RELATION_CONSTRAINTS удалено записей: 1105
Из таблицы RDB$CHECK_CONSTRAINTS удалено записей: 1656
Полез разбираться дальше и обнаружил следующую интересную вещь --
из таблицы RDB$PROCEDURE_PARAMETERS идет 8 236 710 (!) неиндексированных
чтений.
Вопрос: причем здесь параметры процедур, когда удаляются триггеры и
таблички, и почему такое гигантское количество чтений?
Андрей