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

Разная скорость выполнения процедуры

Добавлено: 30 июн 2008, 11:53
Pavel_ch
Столкнулся с непонятной особенностью. Процедуру писал и отлаживал через IBExpert - там всё нормально - выполняется менее секунды (возвращает 700-800 записей). Делаю вызов из приложения и ждать уже секунд 3-5, а то и больше приходится. С чем это может быть связано?

Вызов процедуры в приложении: select * from my_proc(:param1, :param2, .... ,paramN)
Сервер: FB 2.0.3
Доступ через FIBPlus

Добавлено: 30 июн 2008, 12:23
kdv
1. FetchAll.
2. нет никакой "отладки" процедур. IBExpert эмулирует выполнение процедуры, распарсивая ее текст и выполняя операторы SQL самостоятельно.

так что, советую выполнить процедуру как select в SQL Editor, нажав на кнопочку FetchAll (две зеленых стрелки).

Добавлено: 30 июн 2008, 15:44
Pavel_ch
Как оказалось, тормоза были по двум причинам:
a) FetchAll (спасибо kdv за подсказку - в SQL Editor'е как-то забыл вызов процедуры проверить, сразу в приложении его писал)
б) процедура возвращает неупорядоченный набор, соответственно в вызове используется order by, который тоже свой вклад вносит

А насчёт отладки, я конечно неправильно выразился. Не отладка, а статистика выполнения процедуры показывает результат 500-700мс, всё остальное получается жрут вышеупомянутые FetchAll и order by

Добавлено: 04 июл 2008, 20:47
Slavik
Это что же за записи такие возвращает процедура, чтобы на сортировку восьми сотен этих записей и FetchAll понадобилось больше 3 секунд?

Смотри код процедуры. Скорее всего именно она работает медленно.

IBExpert в статистике показывает время выдачи первых строк, если не включен FetchAll.

P.S. Как оценивал влияние odrder by?