Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
Добрый день!
У меня стоит Apache+PHP+Oracle
Проблема в том, что запрос к базе очень трудоемкий и если через PL/SQL отрабатывает примерно за 2 часа, то через PHP скрипт не выдает никаких ошибок, а браузер говорит, что не может отобразить страницу примерно часа через полтора.

Вопрос в том, кто обрывает соединение не дождавшись окончания выполнения запроса ?
Так как в логах нет ошибок, то у меня подозрение, что это браузер...
29 май 13, 18:06    [14366290]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
miksoft
Member

Откуда:
Сообщений: 38545
Имхо, кардинально неверно заставлять ждать браузер и пользователя 2 часа. Реструктуризируйте интерфейс пользователя, сделайте по шагам: заказ отчета - фоновое выполнение отчета с сохранением в промежуточное хранилище (таблица или файл) - просмотр результатов построения отчета.
29 май 13, 18:18    [14366329]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
И как вас за эти два часа админ ещё не расстрелял?
29 май 13, 18:24    [14366343]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
Дело в том,что этот php скрипт это кнопка, по которой надо получить отчет - данных очень много и тут в любом случае ждать
Пользователь просто жмет кнопку и занимается своими делами и меня не напрягает,чтобы мне каждый раз выполнять этот запрос и пересылать ему данные
Вопрос в том, кто прерывает это выполнение?
29 май 13, 18:55    [14366423]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
-2-
Member

Откуда:
Сообщений: 15330
vanb80
данных очень много и тут в любом случае ждать
для больших ненужных данных используют закачку файлов.
29 май 13, 19:01    [14366447]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
miksoft
Member

Откуда:
Сообщений: 38545
vanb80
Вопрос в том, кто прерывает это выполнение?
Да кто угодно может прервать соединение за 2 часа.
29 май 13, 19:02    [14366452]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54382
А через год пользователь будет ждать четыре часа?
29 май 13, 20:44    [14366793]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Мутаген
Member

Откуда:
Сообщений: 719
В php есть лимит на время исполнения запроса, он 30 секунд по умолчанию. Параметр конфигурации max_execution_time. Его можно задрать, но двухчасовой HTTP-запрос -- это всеравно нежизнеспособная конструкция. Более надёжно будет использовать какой-нибудь брокер задач типа Gearman или накостылять на онтопичном Advanced Queuing.
29 май 13, 21:36    [14367005]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
это не принципиально, что два часа
просто не хочу писать отдельно программу, а на http дал URL сотруднику и пусть себе выбирает
кстати, запустил на chrome, он отработал нормально
значит это IE закрывает соединение
30 май 13, 08:34    [14367887]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Vladimir Baskakov
Member

Откуда:
Сообщений: 2006
Присоединяюсь к прошлым выступавшим.
Логично сделать так - 1 пхп процедура запускает расчетный джоб, который формирует данные на сервере и отмечается в таблице о готовности, вторая процедурка позволяет пользователю посмотреть состояние готовности по своим исполняемым процессам, третья - извлечь готовые данные. конечно, отладка инфрастуктуры займет немного времени, но насколько гибче и удобнее станет система. Сразу становится понятно, что можно запускать несколько долгоиграющих отчетов, возможно - извлекать данные старых расчетов с сервера.

А очень много данных = это сколько?
30 май 13, 09:33    [14368152]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Да ну
Guest
vanb80,

А сервер-то не ляжет?

Нажмет нетерпеливый пользователь кнопку F5 в браузере несколько раз, и ваша "очень трудоемкая процедура" начнет выполняться столько же раз в параллельных сессиях (если специальных мер не предпринять) .

Или несколько разных пользователей попросят одно и то же - результат аналогичный.

Как вариант - если уж совсем лениво асинхронную доставку ответа организовывать, научите юзеров пользоваться wget'ом - пусть себе этот отчет в файл скачивает и смотрит.
30 май 13, 09:56    [14368252]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
Там опытный пользователь - системный админстратор и знает, что этот запрос надо ждать.
Это выгрузка из бухгалтерской базы по проводкам для загрузки в другую программу

Думаю сделать просто консольную программу, которая будет excel файл формировать да и все, но тут нужен клиент oracle - тоже проблема)
30 май 13, 10:14    [14368334]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
Vladimir Baskakov
Присоединяюсь к прошлым выступавшим.
Логично сделать так - 1 пхп процедура запускает расчетный джоб, который формирует данные на сервере и отмечается в таблице о готовности, вторая процедурка позволяет пользователю посмотреть состояние готовности по своим исполняемым процессам, третья - извлечь готовые данные. конечно, отладка инфрастуктуры займет немного времени, но насколько гибче и удобнее станет система. Сразу становится понятно, что можно запускать несколько долгоиграющих отчетов, возможно - извлекать данные старых расчетов с сервера.

А очень много данных = это сколько?

Честно говоря, можно поупражняться, но мало времени.
Таблица содержит 13 млн проводок, недавно в dbf ее выгружал - 12 гиг занимает, плюс там к ней в запросе подсоединяются другие таблицы плюс еще объединения всякие. Запрос может не очень оптимальный с точки зрения производительности, но зато ничего не надо лишнего на пхп программировать и сразу по шаблону результат выдавать

К сообщению приложен файл (oborkontr.php - 20Kb) cкачать
30 май 13, 10:50    [14368558]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Да ну
Guest
vanb80
Вопрос в том, кто обрывает соединение не дождавшись окончания выполнения запроса ?
Так как в логах нет ошибок, то у меня подозрение, что это браузер...

Ну раз ежика от кактуса оттащить не удается, могу посоветовать поиграть с http-заголовком keep-alive с учетом написанного тут.
30 май 13, 11:07    [14368692]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
vanb80
Добрый день!
У меня стоит Apache+PHP+Oracle
Проблема в том, что запрос к базе очень трудоемкий и если через PL/SQL отрабатывает примерно за 2 часа, то через PHP скрипт не выдает никаких ошибок, а браузер говорит, что не может отобразить страницу примерно часа через полтора.

Вопрос в том, кто обрывает соединение не дождавшись окончания выполнения запроса ?
Так как в логах нет ошибок, то у меня подозрение, что это браузер...



А разница-то какая?
Ну, считай браузер.
Ты хочешь ситуацию исправить или искать виноватых?
30 май 13, 11:27    [14368839]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
vanb80
Member

Откуда:
Сообщений: 6
MasterZiv
vanb80
Добрый день!
У меня стоит Apache+PHP+Oracle
Проблема в том, что запрос к базе очень трудоемкий и если через PL/SQL отрабатывает примерно за 2 часа, то через PHP скрипт не выдает никаких ошибок, а браузер говорит, что не может отобразить страницу примерно часа через полтора.

Вопрос в том, кто обрывает соединение не дождавшись окончания выполнения запроса ?
Так как в логах нет ошибок, то у меня подозрение, что это браузер...



А разница-то какая?
Ну, считай браузер.
Ты хочешь ситуацию исправить или искать виноватых?


можно конечно сначала составить весь список проблем по всем параметрам и перебирать их, можно выявить кто обрывает соединение и начать работать с настройками этой программы
что тут еще по методологии поиска ошибок можно предложить?
30 май 13, 11:49    [14369022]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
miksoft
Member

Откуда:
Сообщений: 38545
vanb80
Это выгрузка из бухгалтерской базы по проводкам для загрузки в другую программу

Думаю сделать просто консольную программу,
Ну так и замените браузер консольной программой - wget-ом. Заодно и пользовательских действий меньше понадобится.
30 май 13, 12:17    [14369237]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
-2-
Member

Откуда:
Сообщений: 15330
vanb80
можно конечно сначала составить весь список проблем по всем параметрам ...
и потом упереться, что браузер не сможет отрендерить страницу.

miksoft
Ну так и замените браузер консольной программой - wget-ом.
Все браузеры поддерживают загрузку файлов.
30 май 13, 12:34    [14369392]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
ScareCrow
Member

Откуда: Белый город
Сообщений: 17089
автор
В php есть лимит на время исполнения запроса, он 30 секунд по умолчанию.

без танцев с бубном браузер сам закрывает соединение.
30 май 13, 14:08    [14370133]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Vladimir Baskakov
Member

Откуда:
Сообщений: 2006
vanb80
13 млн проводок, недавно в dbf ее выгружал

зачем. Репликация делается по другому, аналитика сворачивается на сервере.
Кому и зачем нужно столько проводок что нельзя его пустить в базу, а нужно через смотрелку. Почему пыхп-срипт не посылает зазипованное на почту заказчика.

Почему он не кладет финал в расшаренную папку. Канал распространения результата странный, и ситуация удивительна. Поистине, чудны дела в подлунном мире. Но, наверное, так надо, и надо только так.
30 май 13, 16:16    [14371282]     Ответить | Цитировать Сообщить модератору
 Re: Трудоемкий запрос к базе и PHP не может дождаться выполнения  [new]
Vladimir Baskakov
Member

Откуда:
Сообщений: 2006
автор
Думаю сделать просто консольную программу, которая будет excel файл формировать да и все, но тут нужен клиент oracle - тоже проблема)

http://yandex.ru/yandsearch?text=jdbc thin driver oracle&lr=213
(и не говорите мне что jre нужно ставить - его можно тупо скопировать, и положить рядом tns-names.ora, или вбить соответствующие атрибуты внутрь)
дальше. Работает ли майкрософтовский одибиси драйвер без ораклового клиента я не знаю, но вдруг?
Ну и велика ли беда поставить клиента (админу!) я не знаю, думаю что не очень. он ставиться сам - только нажимай себе окей.
30 май 13, 16:28    [14371378]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить