|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Вычисление "вешает" web-приложение на время выполнения хранимой процедуры |
|
[решено] Вычисление "вешает" web-приложение на время выполнения хранимой процедуры
|
Старожил Сообщения: 339 |
Профиль | Сайт | Отправить PM | Цитировать
Есть многопользовательский 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 |
Кот Ти Сообщения: 7318
|
Профиль | Отправить PM | Цитировать Как вариант - выделить для данной процедуры своего апача.
|
Отправлено: 20:48, 10-09-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Demiurg,
А заказчик требует, чтобы действие сразу выполнялось? Во-первых, конечно, действие не должен выполнять тот скрипт, который реагирует на нажатие кнопки. Лучше сделать скриптик с аяксом, который будет показывать сколько осталось времени до завершения (или в крайнем случае надпись типа "действие ещё не завершено, пожалуйста перезагрузите страницу позже"). Данный скрипт должен запускать другой процесс, который уже выполняет само действие. А ещё раз такой длинный процесс, может его организовать по-другому, чтобы легче было контролировать? Например, через ПХП скрипт, который будет обновлять каждый раз 5% результатов и писать текущее состояние процесса, далее опять 5%...и так пока все строчки не обновлены. |
------- Отправлено: 03:16, 11-09-2007 | #3 |
Старожил Сообщения: 339
|
Профиль | Сайт | Отправить 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 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Demiurg,
Если это PHP-скрипт, то не вызывайте его через апач, вызываейте через командную строку просто ПХП и Апач там совсм не нужен, функция exec() + неблокирующий вызов и всё. Какая там оперативка?? (в зависимости от оперативной системы ныжно составить неблокирующий вызов через командную строку) Цитата Demiurg:
Может другие проекты имеют виртуальные хосты? |
||
------- Отправлено: 16:25, 11-09-2007 | #5 |
just mar Сообщения: 3904
|
Профиль | Отправить PM | Цитировать Demiurg,
дурацкий вопрос. А нельзя все так делать по крону, результаты куда-нибудь кешировать, а по канапульке выдавать уже эти - предварительно сосчитанные результаты? |
Отправлено: 18:56, 11-09-2007 | #6 |
Старожил Сообщения: 339
|
Профиль | Сайт | Отправить PM | Цитировать Дико перед всеми извиняюсь. Мне позвонили, сказали что целый отдел не может работать (я в этот момент через свой браузер как раз запустил процедуру начислений). Открываю приложение в соседнем табе, и правда не могу залогиниться в приложении. Иду к ним, действительно "ничего не работает". Только к вечеру хватило ума заглянуть у них в настройки браузеров... прописанные ранее прокси отсутствовали. Сейчас в отделе все работает и при начислении. Осталось только выявить "умника", который прокси убрал... а заодно и прокси прозрачным сделать.
Да, но факт остается фактом, при долговременном запросе в соседнем табе действительно нельзя зайти в приложение (признаться, для меня это новость). P.S. Еще раз спасибо всем за отклики... в благодарность, после выявления, могу скинуть асю того "умника"... |
------- Отправлено: 22:34, 11-09-2007 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Создание "Прогресса" на время работы "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 |
|