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

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Pavel_ch
Сообщения: 24
Зарегистрирован: 09 мар 2006, 15:21

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

Сообщение Pavel_ch » 30 июн 2008, 11:53

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 30 июн 2008, 12:23

1. FetchAll.
2. нет никакой "отладки" процедур. IBExpert эмулирует выполнение процедуры, распарсивая ее текст и выполняя операторы SQL самостоятельно.

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

Pavel_ch
Сообщения: 24
Зарегистрирован: 09 мар 2006, 15:21

Сообщение Pavel_ch » 30 июн 2008, 15:44

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

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

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Сообщение Slavik » 04 июл 2008, 20:47

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

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

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

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

Ответить