Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In mssql-django dit artikel wordt uitgelegd hoe groepsgewijze verbindingen werken en hoe u deze configureert voor uw Django-toepassing.
Hoe groepsgewijze verbindingen werken
Standaard gebruikt mssql-django connection pooling op driverniveau. Het standaard pyodbc-pad gebruikt pyodbc-pooling, en het mssql-python-pad gebruikt mssql-python pooling. Wanneer Django een verbinding sluit, stuurt de actieve driver deze terug naar een pool in plaats van de onderliggende databaseverbinding te sluiten. Volgende verbindingsaanvragen hergebruiken gegroepeerde verbindingen, waardoor de overhead van het tot stand brengen van nieuwe databaseverbindingen wordt verminderd. Voor details over de keuze van drivers, zie Selecteer de databasedriver voor mssql-django.
Groepsgewijze verbindingen configureren
Groepsgewijze verbindingen worden beheerd door de DATABASE_CONNECTION_POOLING instelling, die op moduleniveau settings.py wordt geplaatst (buiten de DATABASES woordenlijst):
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 driver-level connection pooling
DATABASE_CONNECTION_POOLING = False
| Waarde | Gedrag |
|---|---|
True (standaard) |
Pooling van verbindingen is ingeschakeld. Gesloten verbindingen worden teruggeplaatst in de pool. |
False |
Verbindingspooling op driverniveau is uitgeschakeld. Het pyodbc-pad stelt Database.pooling=False, en het mssql-python-pad roept PoolingManager.disable(). |
Wanneer moet u groepsgewijze verbindingen uitschakelen
Overweeg om groepsgewijze verbindingen uit te schakelen in deze scenario's:
- Verificatie op basis van tokens: wanneer u toegangstokens gebruikt die verlopen, kunnen poolverbindingen verouderde tokens bevatten.
- Foutopsporing van verbindingsproblemen: het uitschakelen van pooling vereenvoudigt het oplossen van problemen door ervoor te zorgen dat elke aanvraag een nieuwe verbinding maakt.
- Kortdurende processen: Voor scripts of beheeropdrachten die een paar query's maken en afsluiten, voegt pooling geen voordeel toe.
Instellingen voor opnieuw proberen van verbinding
Ongeacht de pooling-instelling kunt u het nieuwepogingsgedrag voor mislukte verbindingspogingen configureren. Zie Configuratieverwijzing voor de volledige lijst met opties voor opnieuw proberen en time-outs.
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,
},
},
}
Django's CONN_MAX_AGE
Django biedt ook een CONN_MAX_AGE instelling waarmee wordt bepaald hoelang Django een databaseverbinding openhoudt voordat deze wordt gesloten. Deze instelling werkt samen met verbindingspooling op driverniveau:
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",
},
},
}
Zie de CONN_MAX_AGE voor meer informatie.
Praktische uitgangspunten:
-
CONN_MAX_AGE=0: veiligst voor foutopsporing en kortstondige taken. -
CONN_MAX_AGE=600: goede standaardinstelling voor veel web-apps. -
CONN_MAX_AGE=3600: redelijk voor stabiele services met hoge doorvoer na belastingstests.
Note
Wanneer je ASGI-servers gebruikt (zoals Daphne of Uvicorn) of threaded deployments, kunnen persistente verbindingen lekken in asynchrone contexten. Als je CONN_MAX_AGE gebruikt met een ASGI-server, stel CONN_HEALTH_CHECKS = True in in ondersteunde Django-versies en test onder realistische gelijktijdige belasting. Zie de Django-documentatie over verbindingsbeheer voor meer informatie.
CONN_HEALTH_CHECKS valideert gegroepeerde verbindingen voordat ze opnieuw worden gebruikt. Als Django een verouderde verbinding detecteert, wordt er transparant een nieuwe geopend. Dit voegt een kleine extra controlekost per aanvraag toe en is meestal de moeite waard om in te schakelen voor langdurige processen.