Тормозит fetch записей

falc
Дата: 02.08.2005 14:36:25
При запросе к серверу происходит очень медленный fetch.

запрос:
Select * From User_Tables

Возвращает на клиента 947 записей за 2.1 сек.

В то время как цикл:

Begin
For x In (Select * From User_Tables) Loop
Null;
End Loop;
End;

Выполняется за 0.27 сек.

Почему так медлено происходит fetch? И можно ли его как-то ускорить?
jjj332
Дата: 02.08.2005 14:49:47
посмотри трасировку, там все понятно :-)
falc
Дата: 02.08.2005 14:51:30
2jjj332
>>посмотри трасировку, там все понятно :-)

А можно подробнее?
Я в оракле новичок :)
Oracle newbie
Дата: 02.08.2005 15:06:09
Сам fetch можно ускорить выставив оптимальный размер буфера в принимающей программе.
Например
В SQLPlus размером этого буффера управляет переменная arraysize
в других клиентах ищи слова prefetch, array buffer size ,OCI_ATTR_PREFETCH_ROWS


Но подумай о возможности нужно ли на клиентской машине сразу 921 строки?
Не фетчь все строки на клиента, если это не надо. Если клиент - человек, он все равно не сможет просмотреть 921 строку которую ты ему прислал, фетч ровно то кол-во строк которое можно будет обработать за раз.
Что то типа экрана, если на экран помещается 100 строк, то фетч только их , остальные дофетчивай по мере необходимости.

Regards.
falc
Дата: 02.08.2005 15:24:59
2Oracle newbie
Спасибо за ответ, попробую поискать.

Т.е. Настройку эту надо искать именно в клиентской программе или в настройках ораклевого клиента?


>>Но подумай о возможности нужно ли на клиентской машине сразу 921 строки?

Это я привел для коннкретного примера, просто 100 строк за 0.2 сек - это тоже медлено.
Dmitry Isaev
Дата: 02.08.2005 15:30:44
А если fetch выполняется в PL/SQL? Допустим средний результат курсора равен 300 записям, которые потом обрабатываются в цикле. Каким образом можно ускорить?
Oracle newbie
Дата: 02.08.2005 15:31:51
настройку надо искать в клиентской программе.
Если ты сам пишешь , то в настройках того на чем пишешь.
Если это OCI то читай OCI Programmers Guide
если это ProC - То читай Pro*C/C++ Precompiler Programmer's Guide
и т.д.

Если используешь готовую программу , то в ее настройках.

Regards.
falc
Дата: 02.08.2005 15:46:47
2Oracle newbie

Понял, спасибо.

Я пишу на PHP у него есть свой API к OCI.
softwarer
Дата: 02.08.2005 15:56:31
Dmitry Isaev
А если fetch выполняется в PL/SQL?

bulk операции.
Dmitry Isaev
Дата: 02.08.2005 16:33:38
Bulk collect использовать не могу, т.к. результат может вернуться больше 1000 и даже больше 10 000, в зависимости от условий. Поэтому в курсоре обрабатываются не больше 1000. Причем rownum в запросе не подходит. Что в этом случае делать?