Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Med anslutningspooler kan ett program använda en anslutning från en pool med anslutningar som inte behöver återupprättas för varje användning. När en anslutning har skapats och placerats i en pool kan ett program återanvända anslutningen utan att utföra hela anslutningsprocessen.
Om du använder en poolanslutning kan det leda till betydande prestandavinster eftersom program kan spara på kostnaderna för att upprätta en anslutning. Detta kan vara särskilt viktigt för mellannivåprogram som ansluter via ett nätverk eller för program som upprepade gånger ansluter och kopplar från, till exempel Internetprogram.
Förutom prestandavinster gör arkitekturen för anslutningspooler att en miljö och dess associerade anslutningar kan användas av flera komponenter i en enda process. Det innebär att fristående komponenter i samma process kan interagera med varandra utan att känna till varandra. En anslutning i en anslutningspool kan användas upprepade gånger av flera komponenter.
Anmärkning
Anslutningspooler kan användas av ett ODBC-program som visar ODBC 2. x beteende, så länge programmet kan anropa SQLSetEnvAttr. När du använder anslutningspooler får programmet inte köra SQL-instruktioner som ändrar databasen eller databasens kontext, till exempel ändra <databasnamnet>, vilket ändrar katalogen som används av en datakälla.
En ODBC-drivrutin måste vara helt trådsäker och anslutningar får inte ha trådtillhörighet som stöd för anslutningspooler. Det innebär att drivrutinen kan hantera ett anrop på valfri tråd när som helst och kan ansluta på en tråd, använda anslutningen på en annan tråd och koppla från på en tredje tråd.
Anslutningspoolen underhålls av Drivrutinshanteraren. Anslutningar hämtas från poolen när programmet anropar SQLConnect eller SQLDriverConnect och returneras till poolen när programmet anropar SQLDisconnect. Storleken på poolen växer dynamiskt, baserat på de begärda resursallokeringarna. Den krymper baserat på tidsgränsen för inaktivitet: Om en anslutning är inaktiv under en tidsperiod (den har inte använts i en anslutning) tas den bort från poolen. Storleken på poolen begränsas endast av minnesbegränsningar och begränsningar på servern.
Driver Manager avgör om en specifik anslutning i en pool ska användas enligt argumenten som skickas i SQLConnect eller SQLDriverConnect, och enligt anslutningsattributen som angetts efter att anslutningen allokerats.
När Drivrutinshanteraren slår samman anslutningar måste den kunna avgöra om en anslutning fortfarande fungerar innan anslutningen delas ut. Annars fortsätter drivrutinshanteraren att dela ut den döda anslutningen till programmet när ett tillfälligt nätverksfel inträffar. Ett nytt anslutningsattribut har definierats i ODBC 3*.x*: SQL_ATTR_CONNECTION_DEAD. Det här är ett skrivskyddat anslutningsattribut som returnerar antingen SQL_CD_TRUE eller SQL_CD_FALSE. Värdet SQL_CD_TRUE innebär att anslutningen har gått förlorad, medan värdet SQL_CD_FALSE innebär att anslutningen fortfarande är aktiv. (Drivrutiner som överensstämmer med tidigare versioner av ODBC kan också stödja det här attributet.)
En drivrutin måste implementera det här alternativet på ett effektivt sätt, annars kommer anslutningspoolens prestanda att försämras. Mer specifikt bör ett anrop för att hämta det här anslutningsattributet inte orsaka en tur-och-retur-resa till servern. I stället bör en drivrutin bara returnera det senast kända tillståndet för anslutningen. Anslutningen är död om den senaste resan till servern misslyckades och inte var död om den senaste resan lyckades.
Anmärkningar
Om en anslutning har gått förlorad (rapporteras via SQL_ATTR_CONNECTION_DEAD) kommer ODBC Driver Manager att förstöra anslutningen genom att anropa SQLDisconnect i drivrutinen. Nya anslutningsbegäranden kanske inte hittar någon användbar anslutning i poolen. Slutligen kan Driver Manager skapa en ny anslutning, förutsatt att poolen är tom.
Om du vill använda en anslutningspool utför ett program följande steg:
Aktiverar anslutningspooler genom att anropa SQLSetEnvAttr för att ange SQL_ATTR_CONNECTION_POOLING miljöattributet till SQL_CP_ONE_PER_DRIVER eller SQL_CP_ONE_PER_HENV. Det här anropet måste göras innan programmet allokerar den delade miljö som anslutningspooler ska aktiveras för. Miljöhandtaget i anropet till SQLSetEnvAttr ska vara inställt på null, vilket gör SQL_ATTR_CONNECTION_POOLING till ett processnivåattribut. Om attributet är inställt på SQL_CP_ONE_PER_DRIVER stöds en enda anslutningspool för varje drivrutin. Om ett program fungerar med många drivrutiner och få miljöer kan det vara mer effektivt eftersom färre jämförelser kan krävas. Om inställningen är inställd på SQL_CP_ONE_PER_HENV stöds en enda anslutningspool för varje miljö. Om ett program fungerar med många miljöer och få drivrutiner kan det vara mer effektivt eftersom färre jämförelser kan krävas. Anslutningspooler inaktiveras genom att ange SQL_ATTR_CONNECTION_POOLING till SQL_CP_OFF.
Allokerar en miljö genom att anropa SQLAllocHandle med argumentet HandleType inställt på SQL_HANDLE_ENV. Miljön som allokeras av det här anropet är en implicit delad miljö eftersom anslutningspooler har aktiverats. Den miljö som ska användas bestäms dock inte förrän SQLAllocHandle med en HandleType av SQL_HANDLE_DBC anropas i den här miljön.
Allokerar en anslutning genom att anropa SQLAllocHandle med InputHandle inställt på SQL_HANDLE_DBC och InputHandle inställt på den miljöreferens som allokerats för anslutningspooler. Driver Manager försöker hitta en befintlig miljö som matchar de miljöattribut som angetts av programmet. Om det inte finns någon sådan miljö skapas en med ett referensantal (underhålls av drivrutinshanteraren) på 1. Om en matchande delad miljö hittas returneras miljön till programmet och dess referensantal ökas. (Den faktiska anslutningen som ska användas bestäms inte av Driver Manager förrän SQLConnect eller SQLDriverConnect anropas.)
Anropar SQLConnect eller SQLDriverConnect för att upprätta anslutningen. Driver Manager använder anslutningsalternativen i anropet till SQLConnect (eller anslutningsnyckelorden i anropet till SQLDriverConnect) och anslutningsattributen som angetts efter anslutningsallokeringen för att avgöra vilken anslutning i poolen som ska användas.
Anmärkning
Hur en begärd anslutning matchas med en poolanslutning bestäms av SQL_ATTR_CP_MATCH miljöattribut. Mer information finns i SQLSetEnvAttr.
ODBC-program som använder anslutningspooler bör anropa CoInitializeEx under programinitiering och CoUninitialize när programmet stängs.
Anropar SQLDisconnect när du är klar med anslutningen. Anslutningen returneras till anslutningspoolen och blir tillgänglig för återanvändning.
För en mer ingående diskussion, se Pooling in the Microsoft Data Access Components.
Överväganden för anslutningspooler
Om du utför någon av följande åtgärder med hjälp av ett SQL-kommando (i stället för via ODBC-API:et) kan det påverka anslutningens tillstånd och orsaka oväntade problem när anslutningspoolen är aktiv:
Öppna en anslutning och ändra standarddatabasen.
Använd SET-instruktionen för att ändra alla konfigurerbara alternativ (inklusive SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE och DATEFORMAT).
Skapa tillfälliga tabeller och lagrade procedurer.
Om någon av dessa åtgärder utförs utanför ODBC-API:et ärver nästa person som använder anslutningen automatiskt de tidigare inställningarna, tabellerna eller procedurerna.
Anmärkning
Förvänta dig inte att vissa inställningar ska finnas i anslutningstillståndet. Du bör alltid ange anslutningstillståndet i programmet och se till att programmet tar bort inställningar för oanvända anslutningspooler.
Driver-Aware Anslutningspooling
Från och med Windows 8 kan en ODBC-drivrutin använda anslutningar i poolen mer effektivt. För mer information, se Anslutningspool med drivarerkännande.
Se även
Ansluta till en datakälla eller drivrutin
Utveckla en ODBC-drivrutin
Poolhantering i Microsofts Data Access-komponenter