Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Вычисление "вешает" web-приложение на время выполнения хранимой процедуры

Ответить
Настройки темы
[решено] Вычисление "вешает" web-приложение на время выполнения хранимой процедуры

Аватара для Demiurg

Старожил


Сообщения: 339
Благодарности: 8

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Demiurg
Дата: 11-09-2007
Есть многопользовательский web-интерфейс (ajax+php) к приложению базы данных (postgresql+plpgsql). Нужно ежеквартально производить начисления контрагентам (10-20 тыс. контрагентов, в будущем с увеличением до 60-100), процесс начисления длится довольно длительно (20-30 мин.). Изначально хранимая-процедура для начислений запускалась по cron'у, все было нормально. Но... заказчик захотел, цитирую "канапульку для начислений" в web-интерфейсе... лана, в конфиге php увеличил максимальное время выполнения скрипта, вывел эту самую "канапульку"... и при нажатии на эту канапульку весь apache "стопорится" до тех пор, пока не закончит выполнение хранимка в базе... ни с другого таба, ни с другого компа в это время до apache не достучаться... !??? причем по базе в это время "лазию" свободно, что через psql, что через PgAdmin, что локально, что удаленно... Что можно сделать с apache'м, чтобы остальные клиенты могли работать, не то что комфортно, но хотя бы хоть как-то работать в это время? (Вариант "по нажатию этой канапульки ночью" не проходит по требованию заказчика, в противном случае я это сделал бы и по cron'у)
P.S. apache-2.0.59, php-5.2.3 (php5-pcre,php5-session,php5-dom,php5-pgsql), postgresql-8.2.4, FreeBSD_CURRENT...

-------
Человек тонкого ума живет бескорыстными, высокими интересами, его радости - это искусство, любовь, наука, путешествия, книги...


Отправлено: 20:19, 10-09-2007

 

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


Как вариант - выделить для данной процедуры своего апача.

Отправлено: 20:48, 10-09-2007 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Demiurg,
А заказчик требует, чтобы действие сразу выполнялось?

Во-первых, конечно, действие не должен выполнять тот скрипт, который реагирует на нажатие кнопки. Лучше сделать скриптик с аяксом, который будет показывать сколько осталось времени до завершения (или в крайнем случае надпись типа "действие ещё не завершено, пожалуйста перезагрузите страницу позже").
Данный скрипт должен запускать другой процесс, который уже выполняет само действие.
А ещё раз такой длинный процесс, может его организовать по-другому, чтобы легче было контролировать? Например, через ПХП скрипт, который будет обновлять каждый раз 5% результатов и писать текущее состояние процесса, далее опять 5%...и так пока все строчки не обновлены.

-------
Fortes fortuna adiuvat


Отправлено: 03:16, 11-09-2007 | #3


Аватара для Demiurg

Старожил


Сообщения: 339
Благодарности: 8

Профиль | Сайт | Отправить PM | Цитировать


...немного уточню... запрос XMLHhttpRequest на выполнение процедуры отправляется на сервер php-скрипту (который в свою очередь запускает хранимку, и по ее завершении посылает ответ клиенту) по клику из web-интерфейса... в интерфейсе отображается, что идет выполнение процедуры... но... другие пользователи уже не могут залогинится в системе, или те что уже залогинились (из других систем) не могут продолжать работу до тех пор как пока не завершится выполнение хранимки, которую запустили с другой машины... меня вот это удивляет... apache получается какой-то "однозадачный"...

"Как вариант - выделить для данной процедуры своего апача"... cross-site extensions to XMLHttpRequest в мазиллах/фоксах разве уже сть?
http://www.w3.org/TR/XMLHttpRequest/ - [Note: A future version or extension of this specification will most likely define a way of doing cross-site requests.]

Что еще заметил: на рабочей станции, на которой все это разрабатывается, куча проектов... грубо говоря - /приложение1/ , /приложение2/, etc. В каждом проекте свой index.xhtml, login.php, etc. Так войти нельзя только в тот проект, где запущена процедура вычисления, в остальные - нормально логинишься, нормально работаешь... !???

-------
Человек тонкого ума живет бескорыстными, высокими интересами, его радости - это искусство, любовь, наука, путешествия, книги...


Последний раз редактировалось Demiurg, 11-09-2007 в 10:52.


Отправлено: 10:19, 11-09-2007 | #4


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Demiurg,
Если это PHP-скрипт, то не вызывайте его через апач, вызываейте через командную строку просто ПХП и Апач там совсм не нужен, функция exec() + неблокирующий вызов и всё. Какая там оперативка?? (в зависимости от оперативной системы ныжно составить неблокирующий вызов через командную строку)

Цитата Demiurg:
Что еще заметил: на рабочей станции, на которой все это разрабатывается, куча проектов... грубо говоря - /приложение1/ , /приложение2/, etc. В каждом проекте свой index.xhtml, login.php, etc. Так войти нельзя только в тот проект, где запущена процедура вычисления, в остальные - нормально логинишься, нормально работаешь... !??? »
А вот это странно - надо покопаться...

Может другие проекты имеют виртуальные хосты?

-------
Fortes fortuna adiuvat


Отправлено: 16:25, 11-09-2007 | #5

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


Demiurg,
дурацкий вопрос. А нельзя все так делать по крону, результаты куда-нибудь кешировать, а по канапульке выдавать уже эти - предварительно сосчитанные результаты?

Отправлено: 18:56, 11-09-2007 | #6


Аватара для Demiurg

Старожил


Сообщения: 339
Благодарности: 8

Профиль | Сайт | Отправить PM | Цитировать


Дико перед всеми извиняюсь. Мне позвонили, сказали что целый отдел не может работать (я в этот момент через свой браузер как раз запустил процедуру начислений). Открываю приложение в соседнем табе, и правда не могу залогиниться в приложении. Иду к ним, действительно "ничего не работает". Только к вечеру хватило ума заглянуть у них в настройки браузеров... прописанные ранее прокси отсутствовали. Сейчас в отделе все работает и при начислении. Осталось только выявить "умника", который прокси убрал... а заодно и прокси прозрачным сделать.
Да, но факт остается фактом, при долговременном запросе в соседнем табе действительно нельзя зайти в приложение (признаться, для меня это новость).

P.S. Еще раз спасибо всем за отклики... в благодарность, после выявления, могу скинуть асю того "умника"...

-------
Человек тонкого ума живет бескорыстными, высокими интересами, его радости - это искусство, любовь, наука, путешествия, книги...


Отправлено: 22:34, 11-09-2007 | #7



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Вычисление "вешает" web-приложение на время выполнения хранимой процедуры

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Создание "Прогресса" на время работы "InetGetSize" sashadeg AutoIt 24 30-09-2009 15:26
MSFT SQL Server - Какие символы нельзя использовать в имени хранимой процедуры? Cognolio Программирование и базы данных 3 09-07-2009 01:59
HDD - Жесткий "вешает" комп наглухо N!kitoZZ Накопители (SSD, HDD, USB Flash) 3 12-06-2008 01:15
[решено] Нет доступа к свойствам "Предотвращение выполнения данных" niko82393 Microsoft Windows Vista 3 05-02-2008 20:25
[решено] ошибка!!! служба "системное приложение com+" неожиданно прервана utyf2 Microsoft Windows 2000/XP 21 27-05-2006 23:55




 
Переход