Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

Проблема при добавлении новых полей в очень объемные компоненты NetCat

Автор: Филипп Казаков, дата: 2013-12-10, просмотров 3651
Тэги

Если у вас сайт на NetCat и если у вас есть компонент, в котором находится очень много объектов (например, 400 тысяч) и если вдруг вы решили добавить в компонент новое поле, вы скорее всего столкнетесь с проблемой. На VPS она проявляется в виде 504 ошибки (вместо сообщения об успешном добавлении поля), а на виртуальном хостинге наверное все просто ляжет...

Дело в том, что Netcat видимо что-то там пишет во все объекты при создании поля, не знаю, что именно, интересующиеся могут проанализировать 675-701 строчки файла \netcat\admin\field\function.inc.php Этот процесс занимает время. Много времени, с учетом размера нашей базы. Очень много времени даже на VPS.

При этом сервер создает экземпляр процесса httpd, который занимается обслуживанием наших запросов. Поэтому у того, кто создает поле, вылетает 504 ошибка и на странице создания поля, и на всех остальных страницах сайта. А у остальных людей сайт в это время работает, но выдает сообщение "Ошибка в функции вывода объектов" во всех своих частях, где вызывается этот компонент или любой из его шаблонов.

Любопытно, что наш зависший процесс httpd очевидно в это время ждет ответа от MySQL, который продолжает выполняться, несмотря на 504 ошибку. Таким образом, если просто не закрывать окно браузера и не дергать сайт, все сработает (время ожидания около 5 минут на 4800 МГц. процессоре).

Итак, чтобы создать новое поле в компоненте с 400 тыс. объектов, надо сделать это, и не закрывать браузер, несмотря на 504 ошибку. В соседней вкладке открыть сам сайт (будет 504), и через 4-5 минут она должна заработать сама, без перезагрузки сервера. Что делать владельцам подобных баз, разместивших их на виртуальном хостинге, даже не знаю... Возможно, что ничего - может виртуальные хостинги умеют автоматически масштабироваться и обрабатывать такие кратковременные нагрузки с удвоенным рвением...

Что характерно, сервер (под управлением CentOS 6) умеет отличать браузеры. То есть при работе с сайтом с одного компьютера, но из двух разных браузеров, каждый из них будет обслуживаться отдельным экземпляром процесса httpd. Поэтому в одном браузере будет 504 ошибка, а в соседнем - работающий сайт. Для меня это стало откровением.


Оставить комментарий 


Ваше имя:
->