Добрый день,

Сейчас эксперементирую с одной базой. Создаю-удаляю
таблички и триггеры. И вот что заметил -- удаление
полтысячи таблиц с помощью блока:

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 (!) неиндексированных
чтений.

Вопрос: причем здесь параметры процедур, когда удаляются триггеры и таблички, и почему такое гигантское количество чтений?

Андрей

Ответить