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?
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
Tags und Links django sql optimization django-orm