Почему мой сайт django / psql невероятно медленный? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть сайт django, который имеет только интерфейс администратора, так как это внутренняя вещь.

Простые страницы загружаются почти мгновенно, как, например, таблица с 10 элементами.

Но загрузка страницы с большим количеством строк и т. Д. Займет 5-10 секунд, а иногда и дольше. Это почти непригодно.

Это НЕ огромная база данных. У меня есть несколько десятков моделей, и ни одна таблица не содержит более 500 записей.

Запуск Ubuntu 10.04 на новейшем четырехъядерном Xeon с 12 ГБ ОЗУ.

Проблемы возникают с производственным сервером (mod_wsgi), а также с сервером разработки. Обычно хуже с рабочим сервером, но оба серьезно работают медленно.

Во время задержки одно ядро ​​ЦП максимально использует Apache (если я использую рабочий сервер) или Python (если я использую сервер разработки).

Я попытался поиграться с WSGIDaemonProcess, изменив количество потоков и процессов, но безрезультатно.

Ниже приведен мой конфигурационный файл apache, но, как я уже сказал, у меня тоже есть проблемы с сервером dev, так что это может и не быть проблемой apache.

Спасибо за любую помощь. Извиняюсь за неправильное использование терминологии и т. Д. Я программист на C и MATLAB и не очень много знаю о серверах, сетях, базах данных или Python. Кроме того, я понимаю, что на медленных ответах django есть несколько тем, и я прочитал их все, но я не нашел ничего, что помогло бы моей ситуации. Спасибо!

WSGIDaemonProcess MY_ACTUAL_IP_ADDRESS user=MY_USERNAME group=MY_USERNAME threads=4
WSGIProcessGroup MY_ACTUAL_IP_ADDRESS

WSGIScriptAlias /wsgi /neuroling/projects/neuroxy/neuroxy_project/neuroxy.wsgi
<Directory /neuroling/projects/neuroxy/neuroxy_project/>
  Order allow,deny
  Allow from all
</Directory>

Alias /media/ /var/www/media/
Alias /static/ /var/www/static/

<Directory /var/www/static>
Order deny,allow
Allow from all
</Directory>

<Directory /var/www/media>
Order deny,allow
Allow from all
</Directory>

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Я решил это сейчас. Я сделал копию своей базы данных и удалил большую часть данных, чтобы посмотреть, повлияет ли это на скорость. Действительно, это перестало быть медленным. Это подтолкнуло меня к тому факту, что проблема была в базе данных (или в доступе к ней), а не в apache или чем-то в этом роде.

Итак, я включил вход в postgresql и просмотрел логи. Были буквально тысячи странных операторов SQL, отправленных, которые казались неуместными. Более тщательная проверка показала, что все они были отправлены для заполнения поля выбора ForeignKey, которое содержало тысячи записей. Только несколько из этих записей действительно возможны в любом конкретном случае, но кажется действительно сложным фильтровать блоки выбора в django, и я еще этого не достиг. Но то, что я сделал, указало эти поля как raw_id_fields, что предотвращает создание окна выбора. Это полностью решило проблему медлительности.

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

1 голос
/ 10 февраля 2012

Вы пробовали панель инструментов отладки Django, чтобы попытаться изолировать медленную точку.

Вы также можете использовать инструменты мониторинга производительности производственных приложений, такие как New Relic.1007 *http://www.newrelic.com

New Relic имеет двухнедельный пробный период со всеми доступными функциями.В течение этого времени хорошо используйте функции снижения производительности и медленного отслеживания транзакций для решения проблемы.Через две недели он упадет до уровня бесплатной подписки, и вы потеряете медленные следы транзакций, но все равно будут иметь снижение производительности по сравнению с веб-транзакциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...