gtools

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Ulme
Сообщения: 16
Зарегистрирован: 27 июн 2008, 14:31

gtools

Сообщение Ulme » 17 июл 2008, 14:16

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

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

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

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: gtools

Сообщение hvlad » 17 июл 2008, 14:24

Ulme писал(а):при использовании gidx (утилита обновления статистики индексов) из зборки gtools
Не знаю таких

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 июл 2008, 15:26

Видимо, автору топика надо обращаться к автору этих утилит.

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

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

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
Последний раз редактировалось WildSery 17 июл 2008, 17:21, всего редактировалось 1 раз.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 17 июл 2008, 17:09

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
А системные индексы обновлять не нужно? Они каким-то образом сами обновляются?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 июл 2008, 17:19

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

Ulme
Сообщения: 16
Зарегистрирован: 27 июн 2008, 14:31

Сообщение Ulme » 18 июл 2008, 17:27

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.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 19 июл 2008, 23:58

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
'Процедура обновления статистики всех индексов в базе';

Ответить