Sdílet prostřednictvím


Sdružování připojení pro Správce ovladačů

Sdružování připojení umožňuje aplikaci používat připojení z fondu připojení, která nemusí být znovu vytvořena pro každé použití. Po vytvoření spojení a jeho umístění do fondu může aplikace znovu použít toto připojení, aniž by prováděla celý proces připojení.

Použití sdružování připojení může vést k významnému zvýšení výkonu, protože aplikace můžou ušetřit režii spojenou s vytvářením připojení. To může být zvlášť důležité pro aplikace střední vrstvy, které se připojují přes síť nebo pro aplikace, které se opakovaně připojují a odpojí, jako jsou například internetové aplikace.

Kromě zvýšení výkonu architektura sdružování připojení umožňuje prostředí a jeho přidružená připojení používat více komponent v jednom procesu. To znamená, že samostatné komponenty ve stejném procesu můžou vzájemně komunikovat, aniž by si navzájem uvědomovali. Více komponent může opakovaně používat připojení ve fondu připojení.

Poznámka:

Aplikace ODBC může používat sdružování připojení, pokud vykazuje chování ODBC 2.x a je schopna volat SQLSetEnvAttr. Při použití sdružování připojení nesmí aplikace spouštět příkazy SQL, které mění databázi nebo kontext databáze, například změnu <názvu> databáze, což změní katalog používaný zdrojem dat.

Ovladač ODBC musí být plně vláknově bezpečný a připojení nesmí mít spojitost s vlákny pro podporu sdružování připojení. To znamená, že ovladač dokáže zpracovat volání libovolného vlákna kdykoli a může se připojit na jednom vlákně, použít připojení v jiném vlákně a odpojit třetí vlákno.

Fond připojení spravuje Správce driverů. Připojení jsou čerpána z fondu, když aplikace volá SQLConnect nebo SQLDriverConnect, a jsou vrácena do fondu, když aplikace volá SQLDisconnect. Velikost fondu se dynamicky zvětšuje na základě požadovaných přidělení prostředků. Zmenší se na základě časového limitu nečinnosti: Pokud je připojení po určitou dobu neaktivní (není používáno), odebere se z fondu připojení. Velikost fondu je omezená pouze omezeními paměti a omezeními na serveru.

Správce ovladačů určuje, jestli se má určité připojení ve fondu používat podle argumentů předaných v sqlConnect nebo SQLDriverConnect a podle atributů připojení nastavených po přidělení připojení.

Když správce ovladačů provádí sdružování připojení, musí být schopen určit, jestli připojení stále funguje, než ho předá dál. V opačném případě správce ovladačů neustále předává nefunkční připojení k aplikaci vždy, když dojde k přechodnému selhání sítě. V rozhraní ODBC 3*.x*: SQL_ATTR_CONNECTION_DEAD byl definován nový atribut připojení. Jedná se o atribut připojení jen pro čtení, který vrací SQL_CD_TRUE nebo SQL_CD_FALSE. Hodnota SQL_CD_TRUE znamená, že připojení bylo ztraceno, zatímco hodnota SQL_CD_FALSE znamená, že připojení je stále aktivní. (Ovladače, které odpovídají dřívějším verzím rozhraní ODBC, mohou také podporovat tento atribut.)

Ovladač musí tuto možnost implementovat efektivně, jinak zhorší výkon sdružování připojení. Konkrétně by volání pro získání tohoto atributu připojení nemělo způsobit komunikaci se serverem. Místo toho by ovladač měl vrátit poslední známý stav připojení. Připojení je mrtvé, pokud poslední cesta na server selhala, a není mrtvé, pokud poslední cesta proběhla úspěšně.

Poznámky

Pokud došlo ke ztrátě připojení (hlášeno prostřednictvím SQL_ATTR_CONNECTION_DEAD), správce ovladačů ODBC toto připojení zničí voláním sqlDisconnect v ovladači. Nové žádosti o připojení nemusí ve fondu najít použitelné připojení. Správce ovladačů může nakonec vytvořit nové připojení za předpokladu, že je fond zcela prázdný.

Pokud chcete použít fond připojení, aplikace provede následující kroky:

  1. Umožňuje sdružování připojení voláním SQLSetEnvAttr pro nastavení atributu prostředí SQL_ATTR_CONNECTION_POOLING na SQL_CP_ONE_PER_DRIVER nebo SQL_CP_ONE_PER_HENV. Toto volání musí být provedeno před přidělením sdíleného prostředí, pro které má být povoleno sdružování připojení. Popisovač prostředí ve volání SQLSetEnvAttr by měl být nastaven na hodnotu null, čímž se SQL_ATTR_CONNECTION_POOLING stane atributem na úrovni procesu. Pokud je atribut nastavený na SQL_CP_ONE_PER_DRIVER, pro každý ovladač se podporuje jeden fond připojení. Pokud aplikace pracuje s mnoha ovladači a několika prostředími, může to být efektivnější, protože může být vyžadováno méně porovnání. Pokud je nastavena hodnota SQL_CP_ONE_PER_HENV, je pro každé prostředí podporován jeden fond připojení. Pokud aplikace pracuje s mnoha prostředími a několika ovladači, může to být efektivnější, protože může být vyžadováno méně porovnání. Sdružování připojení je zakázané nastavením SQL_ATTR_CONNECTION_POOLING na SQL_CP_OFF.

  2. Přidělí prostředí voláním SQLAllocHandle s argumentem HandleType nastaveným na SQL_HANDLE_ENV. Prostředí přidělené tímto voláním bude implicitním sdíleným prostředím, protože bylo povoleno sdružování připojení. Prostředí, které se má použít, však není určeno, dokud není na tomto prostředí zavolána funkce SQLAllocHandle s HandleType SQL_HANDLE_DBC.

  3. Přidělí připojení voláním SQLAllocHandle s InputHandle nastaveným na SQL_HANDLE_DBC a InputHandle nastaven na popisovač prostředí přidělený pro sdružování připojení. Správce ovladačů se pokusí najít existující prostředí, které odpovídá atributům prostředí nastavené aplikací. Pokud takové prostředí neexistuje, vytvoří se prostředí s referenčním počtem (udržovaným Správcem ovladačů) 1. Pokud se najde odpovídající sdílené prostředí, vrátí se prostředí do aplikace a jeho referenční počet se zvýší. (Skutečné připojení, které se má použít, není určeno správcem ovladačů, dokud se nevolá SQLConnect nebo SQLDriverConnect .)

  4. Zavolá SQLConnect nebo SQLDriverConnect k navázání připojení. Správce ovladačů používá možnosti připojení ve volání funkce SQLConnect (nebo klíčových slov připojení ve volání SQLDriverConnect) a atributy připojení nastavené po přidělení připojení k určení, které připojení ve fondu by mělo být použito.

    Poznámka:

    Způsob, jakým je požadované připojení přiřazeno k připojení ve fondu, je určen atributem prostředí SQL_ATTR_CP_MATCH. Další informace naleznete v tématu SQLSetEnvAttr.

    Aplikace ODBC používající sdružování připojení by měly při inicializaci aplikace volat CoInitializeEx a CoUninitialize při zavření aplikace.

  5. Po dokončení připojení volá sqlDisconnect . Připojení je vráceno do fondu připojení a je k dispozici pro opakované použití.

Podrobnou diskuzi najdete v tématu Sdružování v komponentách Microsoft Data Accessu.

Úvahy o sdružování připojení

Provedení některé z následujících akcí pomocí příkazu SQL (nikoli prostřednictvím rozhraní ODBC API) může ovlivnit stav připojení a způsobit neočekávané problémy, když je sdružování připojení aktivní:

  • Otevření připojení a změna výchozí databáze

  • Pomocí příkazu SET můžete změnit všechny konfigurovatelné možnosti (včetně SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTIZE a DATEFORMAT).

  • Vytváření dočasných tabulek a uložených procedur

Pokud se některé z těchto akcí provádí mimo rozhraní ODBC API, další osoba, která připojení používá, automaticky dědí předchozí nastavení, tabulky nebo procedury.

Poznámka:

Neočekávejte, že některá nastavení budou ve stavu připojení. Vždy byste měli nastavit stav připojení ve vaší aplikaci a zajistit, aby aplikace odebrala všechna nepoužívané nastavení sdružování připojení.

Driver-Aware sdružování připojení

Počínaje Windows 8 může ovladač ODBC používat připojení ve fondu efektivněji. Další informace najdete v tématu Driver-Aware sdružování připojení.

Viz také

Připojení ke zdroji dat nebo ovladači
Vývoj ovladače ODBC
Sdružování v komponentách Microsoft pro přístup k datům