Kapcsolatkészletezés az mssql-django-ban

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.