Я пытаюсь профилировать большую часть моего проекта, тщательно анализируя запросы, генерируемые каждой строкой кода.Тщательный анализ требует запуска сервера в режиме отладки, поэтому я могу перебирать эти строки одну за другой и уделять время изучению запросов.
До сих пор я пробовал три неудачных способа сделать это:
Проверка django.db.connection.queries
Вы можете увидеть, какие запросы были сгенерированы и выполнены к базе данных, просмотрев словарь django.db.connection.queries
.Проблема с этим:
- Это нужно активно осматривать.Вы не можете просто иметь его в качестве слушателя и регистрировать эти запросы за кулисами.Вам нужно распечатывать
connection.queries
после каждой отдельной строки, что создает неудобства. - Очевидно, он хранит только запросы, сгенерированные в том же файле, где вы используете
connection.queries
.Если вы проверите его сразу после вызова some_method()
и этот метод будет импортирован из какого-то другого места, вы не увидите сгенерированные запросы some_method
.
Конфигурация журнала
Я настроил следующую конфигурацию ведения журнала в своем файле настроек, в котором регистрируются все запросы, выполняемые к базе данных:
LOGGING = {
'version': 1,
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
}
},
'loggers': {
'django.db.backends': {
'level': 'DEBUG',
'handlers': ['console']
}
}
}
Проблема с этим - PyCharm.При отладке PyCharm оценивает все задействованные переменные, чтобы вы могли увидеть и проверить их значение.В большинстве случаев это удобно, но полностью искажает мой анализ, поскольку для оценки этих переменных запросы выполняются к базе данных и, конечно, они регистрируются.
Панель инструментов отладки
Основная и единственная проблема, связанная с этим, заключается в том, что поведение необходимо перенести в представление.Журнал запросов не отображается до тех пор, пока представление не будет выполнено, поэтому отладка невозможна.