aaa3d писал(а):я тут еще поэксперементировал и вот что нарыл еще:
ограничения на скорость накладывает способ соединения, если по TCP - то к локальной машине 1000 запросов в секунду, к удаленной - 200.
короче, сильно тормозит TCP соединение
Естественно сетка тормозит - каждый вызов процедуры это нехилый обмен по сетке. Именно поэтому количество обращений должно быть минимальным, в идеале - ровно одно, с одним входным параметром и одним выходным.
Гонять данные построчно - это ваще дикость: потери сетки на передачу 1 байта информации и пакета на 32К ровно одинаковое - вот и вся тайна сетки. Общение клиента и сервера выглядит примерно так:
К - Сервер, хочу процедуру позвать
С - Зови
К - Процедуру Foo зову
С - Ну попробуй
К - Первый параметр ХХХ типа YYY
C - Хм! С типом первого параметра угадал!
К - Второй параметр ZZZ типа VVV
C - Опять угадал!
.... и так далее все параметры...
К - Больше параметров нет. Пускай процедуру
С - Ну ты сам этого хотел! Лови свой результат
К - Мать, так этож код ошибки!
С - А это уже не моё дело. Сам думай, чо с ней делать. Конец связи...
И вот такой трафик на каждый чих! Ваще любое общение сервера с клиентом - это тормоза.
Банальный тест: два запроса через ISQL:
select x from table;
select sum(x) from table;
В обоих случаях сервер совершает натуральный поход по таблице, но в одном случае фетчит данные, а в другом обрабатывает и выдаёт результат. Натрави оба на табличку из миллиона записей и насладись результатом... Время работы первого минус время второго, делённое на количество записей - это чистые потери времени в сетке на каждую запись.