2016-07-09 3 views
0

Как я уже говорил выше: у меня довольно большой, но довольно простой скрипт, который получает один json-файл с сайта, декодирует его, а затем сохраняет данные в базу данных PostgreSQL. Для полного завершения (около 300 000 записей) на моем компьютере (процессор i3M, ноутбук) требуется около 4-5 минут, но занимает примерно 10-15 раз дольше, чтобы сделать то же самое на сервере, который я только что арендовал.

У выделенного сервера есть процессор Intel Xeon quad (3Ghz), а на общем уровне намного лучшие характеристики с гораздо лучшим доступом в Интернет, поэтому я уверен, что он не имеет к этому никакого отношения. Он запускает последние версии Debian, Apache/2.4.10, PHP версии 5.6.22-0, PostgreSQL 9.5.
Я попытался скопировать настройки и модули из настроек WAMP, понял, что это моя помощь. К сожалению, этого не произошло. Не уверен, какая информация может помочь в решении этой проблемы, но я более чем счастлив ответить на любой из вопросов.
Я почти уверен, что это имеет какое-то отношение к некоторому варианту, который я, должно быть, пропустил, поэтому любая помощь будет высоко оценена.

PHP скрипт гораздо медленнее на сервере, чем на WAMP localhost

PS: WAMP использует: 2.4.17 Apache, 5.6.16 PHP, 9.5 PostgreSQL.

+2

может быть лучше спросить в http://serverfault.com/ – Jeff

ответ

1

Проблемы с производительностью могут быть вызваны большим количеством вещей.

  • Прежде всего, я уверен, что (?) На вашем локальном ПК установлен SSD-диск, а сервер может работать на «SAS-приводах по умолчанию». Это может иметь огромное значение, когда дело доходит до записи/чтения материала на hdd. Специально для «Random-IO» (I.e. много выбирает с условиями и с «маленьким» dbbuffer)
  • У вас есть «корневой» сервер или арендованная виртуальная машина? Если это VM, помните, что вы также делитесь своими ресурсами с другими vms. (Особенно доступа на SAS-дисках, но и CPU-Time)

Вы должны написать несколько сценариев для «выявления» узких мест:

  • Сгенерировать скрипт, который использует столько значительных ресурсов процессора По возможности, добавьте несколько миллионов итераций, сравните результаты. (Угадайте, что это не проблема)
  • Создайте PHP Scirpt, который использует массивный DISK-IO - сравнивайте результаты для thausands итераций.
  • Создайте скрипт PHP, который использует огромное количество памяти - сравните его снова. (Будьте осторожны, на этом - с помощью tooo много памяти будет вызывать запись данных на жесткий диск, который «уничтожает» результат)

если вы не встретили (неожиданную) разницу в настоящее время, вы устранили Аппаратный вопросы. - Повторите задачу для тяжелых нагрузок базы данных, чтобы выяснить, может ли база данных быть сконфигурирована. Иногда это просто простой флаг «Boolean», который может иметь сильное воздействие на производительность.

+1

Спасибо за ваш комментарий, я многому научился, проверяя шаги, которые вы написали. Мне пришлось настроить файл confgresql conf, и теперь он намного быстрее. – watsta

1

Чтобы расширить доступ к ответу dognose, я считаю, что оптимизация доступа к базе данных может иметь большое значение в производительности.

Может быть интересно посмотреть, что произойдет с временем выполнения, если вы закомментируете запросы БД. Это расскажет вам, сколько времени тратится на БД.

Если БД занимает значительное время, попробуйте выполнить ваши запросы. Вместо того, чтобы отправлять отдельную вставку за раз в БД, попробуйте удерживать их в переменной и отправляя более 50-100 вставок (или более) в пакет. В зависимости от того, как вы настраиваете соединение с БД, для каждого запроса могут быть значительные накладные расходы.

+0

Спасибо, я определенно попробую выполнить запросы, я никогда об этом не думал. – watsta

+0

Работа с партиями очень важна, если вы используете что-то вроде «Hibernate» - иначе вы отправляете миллионы немых «Select-Queries». – dognose

Смежные вопросы