Мое django приложение стало крайне медленным на производстве. Вероятно, это происходит из-за некоторых сложных или неиндексируемых запросов.
Там какой-либо django-выход путь должен представить мое приложение?
Попробуйте панель инструментов отладки Django . Он покажет вам, какие запросы выполняются на каждой странице и сколько времени они занимают. Это действительно полезный, мощный и простой в использовании инструмент.
Также прочтите рекомендации по производительности Django в Оптимизация доступа к базе данных в документации.
И Советы по производительности Django от Джейкоба Каплан-Мосса.
Просто введите "django-profiling" в Google, и вы получите эти (и другие) ссылки:
http: //code.djangoproject. com / wiki / ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot -and-kcachegrind /
Лично я использую подход промежуточного программного обеспечения - то есть каждый пользователь может переключать флаг «профилирования», хранящийся в сеансе, и если мое промежуточное программное обеспечение профилирования замечает, что флаг установлен, он использует Python hotshot вроде этого:
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
РЕДАКТИРОВАТЬ: для профилирования SQL-запросов http://github.com/robhudson/django-debug-toolbar , упомянутый Константином, - это хорошо, но если ваш запросы действительно медленные (вероятно, потому, что их сотни или тысячи), тогда вы будете ждать безумное количество времени, пока они не загрузятся в браузер, и тогда будет сложно просматривать из-за медленности. Кроме того, django-debug-toolbar по своей конструкции не может дать полезную информацию о внутреннем устройстве запросов AJAX.
РЕДАКТИРОВАТЬ2: django-extensions имеет отличную встроенную команду профилирования:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
Просто сделайте это и вуаля:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data