2011-08-24 14 views
8

Sé que es posible obtener todas las consultas SQL que se ejecutaron para la solicitud/respuesta actual cuando DEBUG está activado al mirar connection.queries. El django-debug-toolbar también ayuda mucho en el desarrollo.Registrando consultas Django SQL con DEBUG establecido en False

El problema es que mi servidor de producción tiene mucha carga y me gustaría registrar las consultas que se están ejecutando para cada vista, así puedo optimizar primero las páginas que crean más consultas.

¿Es posible hacer eso sin modificar el controlador de mi base de datos?

Respuesta

4

En Django 1.3, veo la clase BaseDatabaseWrapper en django/db/backends/__init__.py tiene un atributo use_debug_cursor. Esta clase es el contenedor del objeto django.db.connection que representa la conexión de base de datos predeterminada (docs). Parece que establecer este atributo en verdadero provocaría que Django usara un CursorDebugWrapper desde django/db/backends/util.py, que registra todas las consultas que ejecuta, en lugar de un CursorWrapper, que no lo hace.

use_debug_cursor no está presente en Django 1.2, que es lo que he instalado en esta máquina en este momento, por lo que no puedo probarlo en este momento. Si tengo unos minutos, intentaré que un proyecto dummy 1.3 comience a probar esto ... ¡Es posible que esté por encima de mi cabeza aquí!

use_debug_cursor se renombró a force_debug_cursor en Django 1.8

Cuestiones relacionadas