Страница 1 из 1

gtools

Добавлено: 17 июл 2008, 14:16
Ulme
при использовании gidx (утилита обновления статистики индексов) из зборки gtools
обновление происходит только для системных и уникальных индексов (ключи -s и -u), как только начинает обновлять обычные индексы, пишет:

Код: Выделить всё

unsuccessful metadata update 
Index not found
и процесс gidx останавливается

если дропаю этот индекс, то тоже самое происходит на следущем.
Индексы активны

Re: gtools

Добавлено: 17 июл 2008, 14:24
hvlad
Ulme писал(а):при использовании gidx (утилита обновления статистики индексов) из зборки gtools
Не знаю таких

Добавлено: 17 июл 2008, 15:26
WildSery
Видимо, автору топика надо обращаться к автору этих утилит.

А мы по-простому делаем

Код: Выделить всё

execute block as
  declare variable idx char(31);
begin
  for select rdb$index_name from rdb$indices where coalesce(rdb$system_flag, 0) != 1
    into idx
  do
    execute statement 'set statistics index ' || :idx;
end

Добавлено: 17 июл 2008, 17:09
Kotъ-Begemotъ
WildSery писал(а):Видимо, автору топика надо обращаться к автору этих утилит.

А мы по-простому делаем

Код: Выделить всё

execute block as
  declare variable idx char(31);
begin
  for select rdb$index_name from rdb$indices where rdb$system_flag != 1
    into idx
  do
    execute statement 'set statistics index ' || :idx;
end
А системные индексы обновлять не нужно? Они каким-то образом сами обновляются?

Добавлено: 17 июл 2008, 17:19
WildSery
Kotъ-Begemotъ писал(а):А системные индексы обновлять не нужно? Они каким-то образом сами обновляются?
Судя по вопросу, ты не очень-то задумывался, что такое статистика индексов и нафиг её вообще пересчитывают :)
Кстати, я там ошибочку сделал, из головы писал, поправил условие отбора.

Добавлено: 18 июл 2008, 17:27
Ulme
WildSery писал(а):

Код: Выделить всё

execute block as
  declare variable idx char(31);
begin
  for select rdb$index_name from rdb$indices where coalesce(rdb$system_flag, 0) != 1
    into idx
  do
    execute statement 'set statistics index ' || :idx;
end
отдельно запрос

Код: Выделить всё

select rdb$index_name from rdb$indices where coalesce(rdb$system_flag, 0) != 1 
находит все несистемные индексы, но при выполнении блока (пробовал и через процедуру) IBExpert выдает

Код: Выделить всё

This operation is not defined for system tables.
unsuccessful metadata update.
Index not found.

Добавлено: 19 июл 2008, 23:58
Kotъ-Begemotъ
Ulme писал(а):находит все несистемные индексы, но при выполнении блока (пробовал и через процедуру) IBExpert выдает

Код: Выделить всё

This operation is not defined for system tables.
unsuccessful metadata update.
Index not found.
Ну не знаю, у меня ХП работает нормально, специально сделал и проверил.

Код: Выделить всё

SET TERM ^ ;

CREATE OR ALTER PROCEDURE SP_RENEW_INDEXSTAT 
AS
DECLARE VARIABLE CURINDEX VARCHAR(31);
DECLARE VARIABLE ST VARCHAR(60);
BEGIN
  FOR SELECT RDB$INDEX_NAME FROM RDB$INDICES
   WHERE RDB$SYSTEM_FLAG <> 1
   ORDER BY RDB$INDEX_NAME
  INTO :CURINDEX
  DO
   BEGIN
    ST = 'SET STATISTICS INDEX ' || :CURINDEX;
    EXECUTE STATEMENT ST;
   END
END^

SET TERM ; ^

COMMENT ON PROCEDURE SP_RENEW_INDEXSTAT IS
'Процедура обновления статистики всех индексов в базе';