Megosztás:


Illesztőprogram-kezelő kapcsolatkészletezése

A kapcsolatkészletezés lehetővé teszi, hogy az alkalmazás olyan kapcsolatkészletből származó kapcsolatot használjon, amelyet nem kell minden egyes használathoz újra létrehozni. A kapcsolat létrehozása és készletbe helyezése után az alkalmazás a teljes kapcsolati folyamat végrehajtása nélkül újra felhasználhatja ezt a kapcsolatot.

A készletezett kapcsolat használata jelentős teljesítménynövekedést eredményezhet, mivel az alkalmazások megtakaríthatják a kapcsolat létrehozásához szükséges többletterhelést. Ez különösen jelentős lehet a hálózaton keresztül csatlakozó középső szintű alkalmazások, illetve az ismétlődően csatlakozó és leválasztott alkalmazások, például az internetes alkalmazások esetében.

A teljesítménynövekedés mellett a kapcsolatkészletezési architektúra lehetővé teszi, hogy a környezet és a hozzá kapcsolódó kapcsolatok több összetevő számára is használhatók legyenek egyetlen folyamat során. Ez azt jelenti, hogy az ugyanabban a folyamatban lévő különálló összetevők anélkül kommunikálhatnak egymással, hogy tisztában vannak egymással. A kapcsolatkészletben lévő kapcsolatot több összetevő is használhatja.

Megjegyzés:

Az ODBC alkalmazás használhatja a kapcsolatkészletezést, ha ODBC 2.x viselkedést mutat, mindaddig, amíg az alkalmazás képes meghívni az SQLSetEnvAttr függvényt. Kapcsolatkészletezés használatakor az alkalmazás nem hajthat végre olyan SQL-utasításokat, amelyek módosítják az adatbázist vagy az adatbázis környezetét, például módosítják az <adatbázis nevét>, amely módosítja az adatforrás által használt katalógust.

Az ODBC-illesztőknek teljes mértékben szálbiztosnak kell lenniük, és a kapcsolatoknak nem lehetnek szál affinitása a kapcsolatkészletezés támogatásához. Ez azt jelenti, hogy az illesztőprogram bármikor képes kezelni a hívásokat bármelyik szálon, és képes csatlakozni egy szálon, használni a kapcsolatot egy másik szálon, és leválasztani egy harmadik szálon.

A kapcsolatkészletet az Illesztőprogram-kezelő tartja karban. A rendszer akkor hoz létre kapcsolatokat a készletből, amikor az alkalmazás meghívja az SQLConnectet vagy az SQLDriverConnectet , és visszakerül a készletbe, amikor az alkalmazás meghívja az SQLDisconnectet. A készlet mérete dinamikusan nő a kért erőforrás-lefoglalások alapján. Az inaktivitás időtúllépése alapján szűkíti a készletet: Ha egy kapcsolat egy ideig inaktív (nem volt használatban), akkor a rendszer eltávolítja a készletből. A készlet méretét csak a kiszolgáló memóriakorlátjai és korlátai korlátozzák.

Az Illesztőprogram-kezelő meghatározza, hogy egy készlet adott kapcsolatát az SQLConnect vagy az SQLDriverConnect által átadott argumentumok, valamint a kapcsolat lefoglalása után beállított kapcsolatattribútumok alapján kell-e használni.

Amikor a Meghajtókezelő együtt kezeli a kapcsolatokat, meg kell tudnia állapítani, hogy továbbra is működik-e a kapcsolat, mielőtt kiadná azt. Ellenkező esetben az illesztőprogram-kezelő mindig átadja a halott kapcsolatot az alkalmazásnak, amikor átmeneti hálózati hiba történik. Új kapcsolatattribútumot definiáltak az ODBC 3*.x*-ban: SQL_ATTR_CONNECTION_DEAD. Ez egy írásvédett kapcsolati attribútum, amely SQL_CD_TRUE vagy SQL_CD_FALSE adja vissza. A SQL_CD_TRUE érték azt jelenti, hogy a kapcsolat megszakadt, míg a SQL_CD_FALSE érték azt jelenti, hogy a kapcsolat továbbra is aktív. (Az ODBC korábbi verzióinak megfelelő illesztőprogramok is támogathatják ezt az attribútumot.)

Az illesztőprogramnak hatékonyan kell implementálnia ezt a lehetőséget, vagy rontja a kapcsolatkészletezési teljesítményt. A kapcsolatattribútum lekérésére irányuló hívás nem okozhat oda-visszautat a kiszolgálóra. Ehelyett az illesztőprogramnak csak a kapcsolat utolsó ismert állapotát kell visszaadnia. A kapcsolat megszakad, ha a kiszolgálóhoz vezető utolsó kapcsolat sikertelen volt, és nem szakad meg, ha az utolsó kapcsolat sikeres volt.

Megjegyzések

Ha megszakadt a kapcsolat (SQL_ATTR_CONNECTION_DEAD keresztül jelentve), az ODBC Illesztőprogram-kezelő az SQLDisconnect illesztőprogramban való meghívásával megsemmisíti ezt a kapcsolatot. Előfordulhat, hogy az új kapcsolatkérések nem találnak használható kapcsolatot a poolban. Végül az illesztőprogram-kezelő létrehozhat egy új kapcsolatot, feltéve, hogy a készlet üres.

Kapcsolatkészlet használatához az alkalmazás a következő lépéseket hajtja végre:

  1. Engedélyezi a kapcsolatkészletezést az SQLSetEnvAttr meghívásával, hogy a SQL_ATTR_CONNECTION_POOLING környezeti attribútumot SQL_CP_ONE_PER_DRIVER vagy SQL_CP_ONE_PER_HENV értékre állítsa. Ezt a hívást azelőtt kell kezdeményezni, hogy az alkalmazás lefoglalja azt a megosztott környezetet, amelyhez engedélyezni kell a kapcsolatkészletezést. Az SQLSetEnvAttr hívásában a környezet leírójának null értékűnek kell lennie, ami SQL_ATTR_CONNECTION_POOLING folyamatszintű attribútumtá teszi. Ha az attribútum SQL_CP_ONE_PER_DRIVER értékre van állítva, az egyes illesztőprogramok egyetlen kapcsolatkészletet támogatnak. Ha egy alkalmazás sok illesztőprogrammal és kevés környezettel működik, ez hatékonyabb lehet, mert kevesebb összehasonlításra lehet szükség. Ha SQL_CP_ONE_PER_HENV értékre van állítva, minden környezethez egyetlen kapcsolatkészlet támogatott. Ha egy alkalmazás sok környezettel és kevés illesztőprogrammal működik, ez hatékonyabb lehet, mert kevesebb összehasonlításra lehet szükség. A SQL_ATTR_CONNECTION_POOLING értékének SQL_CP_OFF-ra állításával a kapcsolatkészletezés letiltva van.

  2. Egy környezetet úgy foglal le, hogy meghívja az SQLAllocHandle-t , és a HandleType argumentumot SQL_HANDLE_ENV értékre állítja. A hívás által lefoglalt környezet implicit megosztott környezet lesz, mivel a kapcsolatkészletezés engedélyezve van. A használni kívánt környezet azonban nem határozható meg, amíg az SQLAllocHandle SQL_HANDLE_DBC HandleType-jával nem hívja meg ezt a környezetet.

  3. A kapcsolat lefoglalásához hívja meg az SQLAllocHandle függvényt, ahol az InputHandle az SQL_HANDLE_DBC, az InputHandle pedig a kapcsolat poolinghoz lefoglalt környezeti leíró. Az Illesztőprogram-kezelő olyan meglévő környezetet próbál megtalálni, amely megfelel az alkalmazás által beállított környezeti attribútumoknak. Ha nincs ilyen környezet, létrejön egy 1-es referenciaszámmal (amelyet a Driver Manager tart fenn). Ha egyező megosztott környezet található, a rendszer visszaadja a környezetet az alkalmazásnak, és a referenciaszám növekszik. (A ténylegesen használandó kapcsolatot az Illesztőprogram-kezelő nem határozza meg, amíg az SQLConnect vagy az SQLDriverConnect nem lesz meghívva.)

  4. Meghívja az SQLConnectet vagy az SQLDriverConnectet a kapcsolat létrehozásához. Az Illesztőprogram-kezelő az SQLConnect hívásában szereplő kapcsolati beállításokat (vagy az SQLDriverConnect hívásában szereplő kapcsolati kulcsszavakat) és a kapcsolatfoglalás után beállított kapcsolati attribútumokat használja annak meghatározásához, hogy melyik kapcsolatot kell használni a készletben.

    Megjegyzés:

    A kért kapcsolat készletezett kapcsolattal való egyeztetésének módját a SQL_ATTR_CP_MATCH környezeti attribútum határozza meg. További információ: SQLSetEnvAttr.

    A kapcsolatkészletezést használó ODBC-alkalmazásoknak meg kell hívniuk a CoInitializeEx-et az alkalmazás inicializálása során, és coUninitialize-t , amikor az alkalmazás bezárul.

  5. Meghívja az SQLDisconnect-et , ha végzett a kapcsolattal. A kapcsolat visszakerül a kapcsolatkészletbe, és újra elérhetővé válik.

Részletesebb tanulmányozásért lásd a Microsoft Adatelérési összetevők erőforrás-újrafelhasználását.

Kapcsolatkészletezési szempontok

Ha az alábbi műveletek bármelyikét sql-paranccsal hajtja végre (nem az ODBC API-n keresztül), az hatással lehet a kapcsolat állapotára, és váratlan problémákat okozhat, ha a kapcsolatkészletezés aktív:

  • Kapcsolat megnyitása és az alapértelmezett adatbázis módosítása.

  • A SET utasítással módosíthatja a konfigurálható beállításokat (például SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE és DATEFORMAT).

  • Ideiglenes táblák és tárolt eljárások létrehozása.

Ha ezen műveletek bármelyike az ODBC API-n kívül történik, a kapcsolatot használó következő személy automatikusan örökli a korábbi beállításokat, táblákat vagy eljárásokat.

Megjegyzés:

Ne számítson arra, hogy bizonyos beállítások megtalálhatók a kapcsolat állapotában. Mindig állítsa be a kapcsolat állapotát az alkalmazásban, és győződjön meg arról, hogy az alkalmazás eltávolítja a nem használt kapcsolatkészletezési beállításokat.

Driver-Aware kapcsolatkészletezés

A Windows 8-tól kezdve, az ODBC-illesztők hatékonyabban használhatják a kapcsolatkészlet elemeit. További információ: Driver-Aware kapcsolatkészletezés.

Lásd még:

Csatlakozás adatforráshoz vagy illesztőprogramhoz
ODBC-illesztőprogram fejlesztése
Készletezés a Microsoft Data Access-összetevőkben