Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Connection Pooling in mssql-django funktioniert und wie Sie es für Ihre Django-Anwendung konfigurieren.
Funktionsweise von Verbindungspooling
Standardmäßig verwendet mssql-django das in pyodbc integrierte Connection Pooling. Wenn eine Verbindung von Django geschlossen wird, gibt Pyodbc sie an einen Pool zurück, anstatt die zugrunde liegende ODBC-Verbindung zu schließen. Nachfolgende Verbindungsanforderungen verwenden gepoolte Verbindungen, wodurch der Aufwand für die Einrichtung neuer Datenbankverbindungen reduziert wird.
Konfigurieren von Verbindungspooling
Das Verbindungspooling wird durch die Einstellung DATABASE_CONNECTION_POOLING gesteuert, die sich auf Modulebene in settings.py (außerhalb des DATABASES Wörterbuchs) befindet:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
# Set to False to disable pyodbc's connection pooling
DATABASE_CONNECTION_POOLING = False
| Wert | Behavior |
|---|---|
True (Standardwert) |
Verbindungspooling ist aktiviert. Geschlossene Verbindungen werden an den Pool zurückgegeben. |
False |
Verbindungspooling ist deaktiviert. Jede Verbindung ist vollständig geschlossen, wenn sie losgelassen wird. |
Wann Verbindungspooling deaktiviert werden sollte
Erwägen Sie die Deaktivierung von Verbindungspooling in diesen Szenarien:
- Tokenbasierte Authentifizierung: Wenn Zugriffstoken verwendet werden, die ablaufen, können gepoolte Verbindungen veraltete Token enthalten.
- Debuggen von Verbindungsproblemen: Durch deaktivieren des Poolings wird die Problembehandlung vereinfacht, indem sichergestellt wird, dass jede Anforderung eine neue Verbindung erstellt.
- Kurzlebige Prozesse: Für Skripte oder Verwaltungsbefehle, die nur einige Abfragen ausführen und dann enden, bietet Pooling keinen Vorteil.
Verbindungs-Wiederholungseinstellungen
Unabhängig von der Pooleinstellung können Sie das Wiederholungsverhalten für fehlgeschlagene Verbindungsversuche konfigurieren. Die vollständige Liste der Optionen für Wiederholung und Timeout finden Sie in der Konfigurationsreferenz.
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"connection_retries": 3,
"connection_retry_backoff_time": 10,
"connection_timeout": 30,
},
},
}
Djangos CONN_MAX_AGE-Wert
Django bietet auch eine CONN_MAX_AGE Einstellung, die steuert, wie lange Django eine Datenbankverbindung geöffnet hält, bevor sie geschlossen wird. Diese Einstellung funktioniert zusammen mit pyodbcs Verbindungspooling:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"CONN_MAX_AGE": 600, # Keep connections open for 10 minutes
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Weitere Informationen finden Sie in der Dokumentation zu CONN_MAX_AGEden Django-Datenbankeinstellungen.
Praktische Ausgangspunkte:
-
CONN_MAX_AGE=0: am sichersten für Debugging- und kurzlebige Aufträge. -
CONN_MAX_AGE=600: Gute Standardeinstellung für viele Web-Apps. -
CONN_MAX_AGE=3600: vertretbar für Services mit konstant hohem Durchsatz nach Lasttests.
Note
Bei Verwendung von ASGI-Servern (z. B. Daphne oder Uvicorn) oder Threadbereitstellungen können persistente Verbindungen über asynchrone Kontexte hinauslaufen. Wenn Sie CONN_MAX_AGE mit einem ASGI-Server verwenden, setzen Sie CONN_HEALTH_CHECKS = True (Django 4.1 und höhere Versionen) und testen Sie unter realistischen Parallelitätsbedingungen. Weitere Informationen finden Sie in der Django-Dokumentation zur Verbindungsverwaltung.
CONN_HEALTH_CHECKS überprüft poolierte Verbindungen vor der Wiederverwendung. Wenn Django eine veraltete Verbindung erkennt, öffnet sie transparent eine frische Verbindung. Dies fügt pro Anfrage geringe zusätzliche Kosten für eine Prüfung hinzu und lohnt sich in der Regel bei langlebigen Prozessen.