Protokollieren von Django SQL-Abfragen mit DEBUG auf False

8

Ich weiß, dass es möglich ist, alle SQL-Abfragen zu erhalten, die für die aktuelle Anfrage / Antwort ausgeführt wurden, wenn DEBUG aktiviert ist, indem Sie connection.queries . Die django-debug-toolbar hilft auch sehr bei der Entwicklung.

Das Problem ist, dass mein Produktionsserver stark ausgelastet ist und ich möchte die Abfragen protokollieren, die für jede Ansicht ausgeführt werden, damit ich die Seiten optimieren kann, die zuerst mehr Abfragen erstellen.

Ist es möglich, das zu tun, ohne meinen Datenbanktreiber zu ändern?

    
jbochi 24.08.2011, 19:59
quelle

1 Antwort

4

In Django 1.3 sehe ich die Klasse BaseDatabaseWrapper in django/db/backends/__init__.py hat ein Attribut use_debug_cursor . Diese Klasse ist der Wrapper für das django.db.connection -Objekt, das die Standarddatenbankverbindung darstellt ( Dokumente ). Es scheint, als würde das Setzen dieses Attributs auf "true" dazu führen, dass Django ein CursorDebugWrapper von django/db/backends/util.py verwendet, das alle ausgeführten Abfragen protokolliert, anstatt eines CursorWrapper , was nicht der Fall ist.

use_debug_cursor ist in Django 1.2 nicht vorhanden, was ich gerade auf diesem Rechner installiert habe, daher kann ich es jetzt nicht testen. Wenn ich ein paar Minuten Zeit habe, werde ich versuchen, ein Dummy-1.3-Projekt zu bekommen, um das auszuprobieren ... Ich kann hier wohl über meinen Kopf hinweg sein!

use_debug_cursor wurde in Django 1.8 in force_debug_cursor umbenannt

    
sandinmyjoints 24.08.2011 20:34
quelle