Очень медленный Django: несколько вызовов SHOW default_transaction_isolation в журнале

Я использую Django 1.5.4 с PostgreSQL 9.2.4.-2 через psycopg2 2.5.1.

В какой-то момент я заметил, что мой сайт на Django стал очень медленным — загрузка небольших страниц всего несколькими легковесными запросами занимает около 2-3 секунд.

Панель инструментов Django-debug говорит:

241,70 ms (161 queries) - время запроса

time 2992ms - общее время загрузки страницы

Итак, запросы не должны быть проблемой... Но это не так! Я настроил ведение журнала запросов postgresql и получил следующее:

[LOG ENTRY] 2013-09-18 11:17:05.148 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.762 ms  statement: SELECT ...
[LOG ENTRY] 2013-09-18 11:17:05.155 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.086 ms  statement: SHOW default_transaction_isolation
[LOG ENTRY] 2013-09-18 11:17:05.158 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.804 ms  statement: SELECT ...
[LOG ENTRY] 2013-09-18 11:17:05.164 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.092 ms  statement: SHOW default_transaction_isolation
[LOG ENTRY] 2013-09-18 11:17:05.168 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.757 ms  statement: SELECT ...
[LOG ENTRY] 2013-09-18 11:17:05.175 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.085 ms  statement: SHOW default_transaction_isolation
[LOG ENTRY] 2013-09-18 11:17:05.178 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.779 ms  statement: SELECT ...
[LOG ENTRY] 2013-09-18 11:17:05.185 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.091 ms  statement: SHOW default_transaction_isolation
[LOG ENTRY] 2013-09-18 11:17:05.190 MSK 10304 127.0.0.1(38834)LOG:  duration: 1.492 ms  statement: SELECT ...
[LOG ENTRY] 2013-09-18 11:17:05.197 MSK 10304 127.0.0.1(38834)LOG:  duration: 0.090 ms  statement: SHOW default_transaction_isolation

После моего целевого запроса есть запрос SHOW default_transaction_isolation. Лог говорит, что для выполнения этого странного запроса требуется 0,086 мс, но он создает вокруг него задержки около 10 мс:

  • запрос №1 завершен 11:17:05.148
  • странный запрос
  • запрос №2 завершен 11:17:05.158

Кто-нибудь знает, является ли это ошибкой django, psycopg, postgres или любого другого приложения? Как я могу исследовать это?

UPD Проект Pure Django (только Django, postgresql, psycopg2) выполняет запросы без этой ошибки. Возможно, что-то есть в приложениях проекта или сторонних приложениях. Я пытаюсь провести расследование.


person MrKsn    schedule 18.09.2013    source источник


Ответы (1)


Мне потребовалось несколько дней, чтобы обнаружить источник проблемы. Это заняло так много времени из-за моих неверных догадок: я был уверен, что проблема была каким-то образом вызвана базой данных или библиотекой подключения базы данных к Python.

Причина была в django-debug-toolbar — насколько я понимаю, его измерение времени выполнения SQL приводит к низкой производительности в целом.

Подводя итог, если ваш сайт Django работает медленно, проверьте, отключены ли DEBUG = False и django-debug-toolbar.

person MrKsn    schedule 18.09.2013
comment
Все еще действует в 2020 году. Я сделал то же самое и задался вопросом, почему загрузка моей страницы заняла целую вечность. После того, как я деактивировал django-debug-toolbar, он снова мгновенно отобразился. Благодарю вас! - person sqe; 13.11.2020