Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Ulme
- Сообщения: 16
- Зарегистрирован: 27 июн 2008, 14:31
Сообщение
Ulme » 17 июл 2008, 14:16
при использовании gidx (утилита обновления статистики индексов) из зборки gtools
обновление происходит только для системных и уникальных индексов (ключи -s и -u), как только начинает обновлять обычные индексы, пишет:
Код: Выделить всё
unsuccessful metadata update
Index not found
и процесс gidx останавливается
если дропаю этот индекс, то тоже самое происходит на следущем.
Индексы активны
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
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
'Процедура обновления статистики всех индексов в базе';