savage

savage
Рейтинг
224
Регистрация
10.01.2007
Должность
Разработка и продвижение сайтов
burunduk:
а не проще загрузить данный на сервер и обрабатывать их частями что бы в среднем время работы скрипта не превышало 30секунд :)

Спасибо, можно, и так, если будут затыки и увеличится объем информации, похоже позже и сделаю, просто нужно, чтобы клиент видел, что загрузка прошала и результат, сколько чего добавлено, сколько чего нового и т.п.. Если добавить еще таблицу со статистикой, то можно. Вообще похоже действительно апач не предназначен для таких обработок.

8200 записей без flush(); не обрабатываются даже с пустыми принтами, c периодическим flush(); - все нормально работает - cпасибо Tortemon.

В итоге, благодаря всем, по кусочкам нарисовалась полная картина - и все работает! Всем спасибо!

gormarket, спасибо!!! оказывается даже пустой print " "; спасает!

Прошло времени: 466 секунд на 8266 записей, не считая времени загрузки файла.

Хотя мне лично не совсем понятно - неужели всегда так или можно как-то настроить apache более грамотно?

gormarket:
Могу еще посоветовать сделать вывод сообщений в скрипте, допустим через 100 или 500 шагов цикла (а не один раз после завершения цикла)
Встречал сообщения о том что помогает не падать длительным скриптам.

Как это сделать?

gormarket:
savage, а у Вас случайно не стоит nginx в качестве фронтенда и Apache в качестве бэкенда.

Вроде нет - nginx-а я в процессах не нашел.

gormarket:
Есть пара time-параметров в настройках апача, которые могут иметь похожую величину

TimeOut - таймер сервера Apache, который по-умолчанию установлен в 300 секунд (реально встречал значения 30 и даже 10 секунд)..

TimeOut установил в 60000

gormarket:

В PHP5 есть функция apache_reset_timeout(), которую можно периодически вызывать в длительно работающих скриптах для сброса таймера.

А вот за это большое спасибо - щас, попробую!! PHP5!

:( Fatal error: Call to undefined function apache_reset_timeout() это при том что PHP Version 5.2.9

Пересобирать apache? Не повлияет ли это на работу директ-админа?

Tortemon:
Продолжает загружать страницу?

Угу ((((((

LEOnidUKG:
Сделайте внутри цикла условие в конце:

if ($k==8000) break;
А так же посмотрите, какое оно принимает значение.

Скрипт отрабатывает 8000 записей, пишет в логфайл Прошло времени: 446 секунд, отработано 8000 записей, и должен по логике передать ответ в браузер, но не передает, а браузер все также висит.

Rel:
Как результат? Не решилась проблема?

После закрытия базы 2000 записей уже обработал без ошибок, 4000 та же проблема. Сейчас еще UPDATE по id стал делать, еще лучше должно стать, экспериментирую пока.

set_time_limit(0); тоже оставил вначале кода.

УРА!! Всем спасибо! С обновлением по id 4000 записей загрузились за 197 секунд, но это только остатки. Сейчас буду пробовать с 8000 записями, но там уже код другой и операций значительно больше.

Особое спасибо Rel за закрытие соединения и LEOnidUKG за "топорный код" - сразу мозги на место вернулись :)

....причем в других таблицах ведь по индексам же апдейтится...

savage добавил 21.11.2011 в 04:20

А вот на 8200 записях опять такой же затык, база, и файлы закрываются, обновление по id, скрипт отрабатывает за 452 секунды, а браузер висит :(, как будто ответ от сервера не вернулся.

savage добавил 21.11.2011 в 09:26

Есть еще какие-нибудь идеи?

LEOnidUKG:
1. Cделайте индексы к полям с которыми работаете
2. У вас мускуль случаем не уходит в mysql gone away?

p.s. код топорный аж ЖУТЬ.

Нет не уходит. Индекс есть, точно апдейт лучше по индексу делать :), просто было куча переделок, артикулы, наименования, и то одно ключ, то другое + реструкторизация базы.

В чем еще топорность?

Rel:
Почему? Попробуйте закрыть.

почему? не знаю :) - уже пробую, спасибо.

Всего: 2322