Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan működik a mssql-django kapcsolatkészletezés, és hogyan konfigurálható a Django-alkalmazáshoz.
A kapcsolatkészletezés működése
Alapértelmezés szerint mssql-django a pyodbc beépített kapcsolatkészletezését használja. Amikor a Django lezár egy kapcsolatot, a pyodbc a mögöttes ODBC-kapcsolat bezárása helyett visszahelyezi azt egy kapcsolatpoolba. A későbbi kapcsolatkérések újra felhasználják a készletezett kapcsolatokat, ami csökkenti az új adatbázis-kapcsolatok létrehozásának többletterhelését.
Kapcsolat-összevonás konfigurálása
A kapcsolatpool-kezelést a DATABASE_CONNECTION_POOLING beállítás szabályozza, amely a settings.py modul szintjén található (a DATABASES szótáron kívül):
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
| Érték | Magatartás |
|---|---|
True (alapértelmezett) |
A kapcsolat-pooling engedélyezett. A lezárt kapcsolatok visszakerülnek a kapcsolatpoolba. |
False |
A kapcsolatcsoportosítás le van tiltva. A feloldáskor minden kapcsolat teljesen bezárul. |
Mikor kell letiltani a kapcsolatkészletezést
Fontolja meg a kapcsolatkészletezés letiltását az alábbi esetekben:
- Jogkivonatalapú hitelesítés: Lejárt hozzáférési jogkivonatok használatakor előfordulhat, hogy a készletezett kapcsolatok elavult jogkivonatokat tárolnak.
- Csatlakozási problémák hibakeresése: A készletezés letiltása leegyszerűsíti a hibaelhárítást azáltal, hogy minden kérés új kapcsolatot hoz létre.
- Rövid élettartamú folyamatok: A néhány lekérdezést és kilépést eredményező szkriptek vagy felügyeleti parancsok esetében a készletezés nem jár előnyökkel.
Kapcsolat újrapróbálkozási beállításai
A készletezési beállítástól függetlenül konfigurálhatja a sikertelen kapcsolati kísérletek újrapróbálkozási viselkedését. Az újrapróbálkozási és időtúllépési lehetőségek teljes listáját lásd: Konfigurációs referencia.
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,
},
},
}
A Django CONN_MAX_AGE értéke
A Django olyan CONN_MAX_AGE beállítást is biztosít, amely azt szabályozza, hogy a Django mennyi ideig tart nyitva egy adatbázis-kapcsolatot a bezárása előtt. Ez a beállítás a Pyodbc kapcsolatkészletezésével együtt működik:
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",
},
},
}
További információkért CONN_MAX_AGElásd a Django adatbázis-beállítások dokumentációját.
Gyakorlati kiindulópontok:
-
CONN_MAX_AGE=0: a legbiztonságosabb a hibakereséshez és a rövid élettartamú feladatokhoz. -
CONN_MAX_AGE=600: jó alapértelmezett számos webalkalmazáshoz. -
CONN_MAX_AGE=3600: a terheléstesztelés után az állandó nagy átviteli sebességű szolgáltatások esetében ésszerű.
Note
ASGI-szerverek (például a Daphne vagy az Uvicorn) vagy többszálú telepítések használatakor a perzisztens kapcsolatok átszivároghatnak az aszinkron környezetek között. Ha ASGI-kiszolgálóval használja CONN_MAX_AGE , állítsa be CONN_HEALTH_CHECKS = True (Django 4.1 és újabb) és tesztelje valós egyidejűség mellett. További információkért tekintse meg a Django kapcsolatkezeléssel kapcsolatos dokumentációját.
CONN_HEALTH_CHECKS ellenőrzi a készletezett kapcsolatokat, mielőtt újra felhasználja. Ha a Django elavult kapcsolatot észlel, transzparensen megnyit egy újat. Ez kis kérelemenkénti ellenőrzési költséget ad hozzá, és általában érdemes engedélyezni a hosszú élettartamú folyamatokhoz.