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 a mssql-django illesztőprogram-szintű kapcsolat-összevonást használja. Az alapértelmezett pyodbc út pyodbc poolinget használ, míg az mssql-python út mssql-python poolingot. Amikor a Django bezár egy kapcsolatot, az aktív meghajtóprogram visszahelyezi azt a kapcsolatpoolba a mögöttes adatbázis-kapcsolat bezárása helyett. 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. A meghajtó kiválasztásával kapcsolatos részletekért lásd Select the database driver for mssql-django.

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 driver-level 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 Az illesztőszintű kapcsolatkészletezés le van tiltva. A pyodbc kódútvonal beállítja a(z) Database.pooling=False értéket, az mssql-python kódútvonal pedig meghívja a(z) PoolingManager.disable() elemet.

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 driver-szintű kapcsolati poolinggal 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

Amikor ASGI szervereket (például Daphne vagy Uvicorn) vagy szálas telepítéseket használsz, a tartós kapcsolatok szivároghatnak aszinkron kontextusok között. Ha ASGI-kiszolgálóval használod a CONN_MAX_AGE elemet, támogatott Django-verziókban állítsd be a CONN_HEALTH_CHECKS = True értéket, és tesztelj valósághű párhuzamos terhelés 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.