PHP Oracle 10g очень медленная выборка

Я не привык использовать Oracle, поэтому я не могу правильно задать свой вопрос.

Я выполняю очень простые SELECT запросы с сервера Linux Apache с PHP 5.3 (PECL Oci8 1.4.6, клиент 11.2.0.3.0) на сервер Oracle (10g Enterprise Edition Release 10.2.0.1.0), которым я не являюсь админ из.

oci_parse и oci_execute занимают меньше миллисекунды, но oci_fetch_array, которые я делаю сразу после этого, ДЕЙСТВИТЕЛЬНО медленные (иногда больше секунды).

Сначала я пытался изменить SELECT * на SELECT [all the columns I need], но все равно медленно.

На что мне обратить внимание?


person Fabien Ménager    schedule 20.06.2012    source источник
comment
Сколько столбцов возвращается и какие они типы данных?   -  person Bailey Parker    schedule 20.06.2012
comment
Самая большая таблица имеет почти 100, но та же проблема с меньшим количеством столбцов. Типы данных: дата, число, varchar2, clob.   -  person Fabien Ménager    schedule 20.06.2012
comment
Возможно ли, что вашим узким местом действительно является сеть? Выборка будет захватывать строки с сервера на клиент, я предполагаю, что они не находятся в одной подсети (удаленный хостинг вашего сервера?)   -  person tbone    schedule 20.06.2012
comment
Я думал, что это было раньше, но когда я просматриваю данные с помощью такого инструмента, как Adminer (на том же сервере Apache), данные отображаются очень быстро по сравнению с моими запросами.   -  person Fabien Ménager    schedule 20.06.2012
comment
Я испытал то же самое на 10g. Объясните, что с планом все в порядке. Загрузка с помощью SQLDeveloper была в порядке. Но загрузка на веб-сервере была медленной. Профилирование показало, что виновником является oci_fetch_*. Я думаю, что это связано с LOB, но не нашел решения.   -  person Gordon    schedule 20.06.2012
comment
У меня есть LOB, но они читаются довольно быстро. Я много гуглил о медленном извлечении oci, но не понял :(   -  person Fabien Ménager    schedule 20.06.2012


Ответы (1)


Попробуй это:

oci_set_prefetch($statement_id, 1000);

... или увеличьте значение oci8.default_prefetch в php.ini.

person Narf    schedule 20.06.2012
comment
Хотел сделать, но поддерживается только Oracle 11g (у меня 10g) - person Fabien Ménager; 20.06.2012
comment
Если вы не используете курсоры - для этого не требуется 11g, и это действительно зависит от Oracle Instant Client, для которого вы сказали, что это версия 11.2.0.3.0. Он должен работать. :) - person Narf; 20.06.2012
comment
У меня уже есть oci8.default_prefetch = 100 в php.ini, и все выборки занимают почти одинаковое время (от первого до последнего) - person Fabien Ménager; 20.06.2012
comment
Я также изменил различные настройки oci в своей настройке, и это несколько улучшило ситуацию, но все равно было намного медленнее, чем должно быть imo. oci_fetch_* по-прежнему будет очень медленным. - person Gordon; 20.06.2012