Delen via


Groepsgewijze stuurprogrammabeheerverbinding

Met groepsgewijze verbindingen kan een toepassing een verbinding gebruiken vanuit een groep verbindingen die niet opnieuw tot stand hoeven te worden gebracht voor elk gebruik. Zodra een verbinding is gemaakt en in een groep is geplaatst, kan een toepassing die verbinding opnieuw gebruiken zonder het volledige verbindingsproces uit te voeren.

Het gebruik van een gegroepeerde verbinding kan leiden tot aanzienlijke prestatieverbeteringen, omdat toepassingen de overhead bij het maken van een verbinding kunnen besparen. Dit kan met name belangrijk zijn voor toepassingen in de middelste laag die verbinding maken via een netwerk of voor toepassingen die herhaaldelijk verbinding maken en de verbinding verbreken, zoals internettoepassingen.

Naast prestatieverbeteringen kan de architectuur voor verbindingspooling een omgeving en de bijbehorende verbindingen in één proces gebruiken door meerdere onderdelen. Dit betekent dat zelfstandige onderdelen in hetzelfde proces met elkaar kunnen communiceren zonder dat ze van elkaar op de hoogte zijn. Een verbinding in een verbindingsgroep kan herhaaldelijk door meerdere onderdelen worden gebruikt.

Opmerking

Groepsgewijze verbindingen kunnen worden gebruikt door een ODBC-toepassing met ODBC 2. x-gedrag , zolang de toepassing SQLSetEnvAttr kan aanroepen. Bij het gebruik van groepsgewijze verbindingen mag de toepassing geen SQL-instructies uitvoeren die de database of de context van de database wijzigen, zoals het wijzigen van de <databasenaam>, waardoor de catalogus die door een gegevensbron wordt gebruikt, wordt gewijzigd.

Een ODBC-stuurprogramma moet volledig thread-veilig zijn en verbindingen mogen geen threadaffiniteit hebben om groepsgewijze verbindingen te ondersteunen. Dit betekent dat het stuurprogramma op elk gewenst moment een gesprek op een thread kan afhandelen en verbinding kan maken op één thread, de verbinding op een andere thread kan gebruiken en de verbinding met een derde thread loskoppelt.

De verbindingsgroep wordt onderhouden door Driver Manager. Verbindingen worden opgehaald uit de pool wanneer de toepassing SQLConnect of SQLDriverConnect aanroept en wordt geretourneerd naar de pool wanneer de toepassing SQLDisconnect aanroept. De grootte van de pool groeit dynamisch op basis van de aangevraagde resourcetoewijzingen. Deze wordt verkleind op basis van de time-out voor inactiviteit: als een verbinding gedurende een bepaalde periode inactief is (deze is niet gebruikt in een verbinding), wordt deze uit de pool verwijderd. De grootte van de pool wordt alleen beperkt door geheugenbeperkingen en limieten op de server.

Driver Manager bepaalt of een specifieke verbinding in een pool moet worden gebruikt volgens de argumenten die zijn doorgegeven in SQLConnect of SQLDriverConnect, en volgens de verbindingskenmerken die zijn ingesteld nadat de verbinding is toegewezen.

Wanneer Driver Manager verbindingen groepeert, moet deze kunnen bepalen of een verbinding nog steeds werkt voordat de verbinding wordt uitgedeeld. Anders blijft Driver Manager de dode verbinding met de toepassing overdragen wanneer er een tijdelijke netwerkfout optreedt. Er is een nieuw verbindingskenmerk gedefinieerd in ODBC 3*.x*: SQL_ATTR_CONNECTION_DEAD. Dit is een alleen-lezen verbindingskenmerk dat SQL_CD_TRUE of SQL_CD_FALSE retourneert. De waarde SQL_CD_TRUE betekent dat de verbinding is verbroken, terwijl de waarde SQL_CD_FALSE betekent dat de verbinding nog steeds actief is. (Stuurprogramma's die voldoen aan eerdere versies van ODBC kunnen dit kenmerk ook ondersteunen.)

Een stuurprogramma moet deze optie efficiënt implementeren, anders zal dit de prestaties van de verbindingspooling nadelig beïnvloeden. Een aanroep om dit verbindingskenmerk op te halen, moet niet leiden tot een retour naar de server. In plaats daarvan moet een stuurprogramma alleen de laatst bekende status van de verbinding retourneren. De verbinding is dood als de laatste reis naar de server is mislukt en niet dood is als de laatste reis is geslaagd.

Opmerkingen

Als een verbinding is verbroken (gerapporteerd via SQL_ATTR_CONNECTION_DEAD), vernietigt ODBC-stuurprogrammabeheer die verbinding door SQLDisconnect aan te roepen in het stuurprogramma. Nieuwe verbindingsaanvragen vinden mogelijk geen bruikbare verbinding in de pool. Uiteindelijk kan driverbeheer een nieuwe verbinding maken, ervan uitgaande dat de pool leeg is.

Als u een verbindingsgroep wilt gebruiken, voert een toepassing de volgende stappen uit:

  1. Hiermee schakelt u groepsgewijze verbindingen in door SQLSetEnvAttr aan te roepen om het SQL_ATTR_CONNECTION_POOLING omgevingskenmerk in te stellen op SQL_CP_ONE_PER_DRIVER of SQL_CP_ONE_PER_HENV. Deze aanroep moet worden uitgevoerd voordat de toepassing de gedeelde omgeving toewijst waarvoor groepsgewijze verbindingen moeten worden ingeschakeld. De omgevingshandler in de aanroep naar SQLSetEnvAttr moet worden ingesteld op null, waardoor SQL_ATTR_CONNECTION_POOLING een kenmerk op procesniveau wordt. Als het kenmerk is ingesteld op SQL_CP_ONE_PER_DRIVER, wordt één verbindingsgroep ondersteund voor elk stuurprogramma. Als een toepassing met veel stuurprogramma's en weinig omgevingen werkt, kan dit efficiënter zijn omdat er minder vergelijkingen nodig zijn. Als deze optie is ingesteld op SQL_CP_ONE_PER_HENV, wordt één verbindingsgroep ondersteund voor elke omgeving. Als een toepassing met veel omgevingen en weinig stuurprogramma's werkt, kan dit efficiënter zijn omdat er minder vergelijkingen nodig zijn. Connectiepooling wordt uitgeschakeld door SQL_ATTR_CONNECTION_POOLING in te stellen op SQL_CP_OFF.

  2. Wijst een omgeving toe door SQLAllocHandle aan te roepen met het argument HandleType ingesteld op SQL_HANDLE_ENV. De omgeving die door deze aanroep wordt toegewezen, is een impliciete gedeelde omgeving omdat groepsgewijze verbindingen is ingeschakeld. De omgeving die moet worden gebruikt, wordt echter niet bepaald, totdat SQLAllocHandle met een HandleType van SQL_HANDLE_DBC wordt aangeroepen in deze omgeving.

  3. Wijst een verbinding toe door SQLAllocHandle aan te roepen met InputHandle ingesteld op SQL_HANDLE_DBC en de InputHandle ingesteld op de omgevingsgreep die is toegewezen voor groepsgewijze verbindingen. Driver Manager probeert een bestaande omgeving te vinden die overeenkomt met de omgevingskenmerken die door de toepassing zijn ingesteld. Als er geen dergelijke omgeving bestaat, wordt er een gemaakt, met een verwijzingsaantal (onderhouden door Driver Manager) van 1. Als er een overeenkomende gedeelde omgeving wordt gevonden, wordt de omgeving geretourneerd naar de toepassing en wordt het aantal verwijzingen verhoogd. (De werkelijke verbinding die moet worden gebruikt, wordt pas bepaald door Driver Manager als SQLConnect of SQLDriverConnect wordt aangeroepen.)

  4. Roept SQLConnect of SQLDriverConnect aan om de verbinding te maken. Driver Manager gebruikt de verbindingsopties in de aanroep naar SQLConnect (of de verbindingstrefwoorden in de aanroep naar SQLDriverConnect) en de verbindingskenmerken die zijn ingesteld na de verbindingstoewijzing om te bepalen welke verbinding in de pool moet worden gebruikt.

    Opmerking

    Hoe een aangevraagde verbinding overeenkomt met een gegroepeerde verbinding, wordt bepaald door het SQL_ATTR_CP_MATCH omgevingskenmerk. Zie SQLSetEnvAttr voor meer informatie.

    ODBC-toepassingen die gebruikmaken van groepsgewijze verbindingen, moeten CoInitializeEx aanroepen tijdens de initialisatie van toepassingen en CoUninitialiseren wanneer de toepassing wordt gesloten.

  5. Roept SQLDisconnect aan wanneer u klaar bent met de verbinding. De verbinding wordt geretourneerd naar de verbindingsgroep en wordt beschikbaar voor hergebruik.

Zie Pooling in de Microsoft Data Access Components voor een uitgebreide bespreking.

Overwegingen voor groepsgewijze verbindingen

Het uitvoeren van een van de volgende acties met behulp van een SQL-opdracht (in plaats van via de ODBC-API) kan de status van de verbinding beïnvloeden en onverwachte problemen veroorzaken wanneer verbindingspooling actief is:

  • Een verbinding openen en de standaarddatabase wijzigen.

  • Met de instructie SET kunt u instelbare opties wijzigen (waaronder SET ROWCOUNT, ANSI_NULL, IMPLICIT_TRANSACTIONS, SHOWPLAN, STATISTICS, TEXTSIZE en DATEFORMAT).

  • Tijdelijke tabellen en opgeslagen procedures maken.

Als een van deze acties buiten de ODBC-API wordt uitgevoerd, neemt de volgende persoon die de verbinding gebruikt automatisch de vorige instellingen, tabellen of procedures over.

Opmerking

Verwacht niet dat bepaalde instellingen aanwezig zijn in de verbindingsstatus. U moet altijd de verbindingsstatus in uw toepassing instellen en ervoor zorgen dat de toepassing ongebruikte instellingen voor groepsgewijze verbindingen verwijdert.

Driver-Aware groepsgewijze verbinding

Vanaf Windows 8 kan een ODBC-stuurprogramma efficiënter verbindingen in de pool gebruiken. Zie Driver-Aware Connection Pooling voor meer informatie.

Zie ook

Verbinding maken met een gegevensbron of stuurprogramma
Een ODBC-stuurprogramma ontwikkelen
Groeperen in de Microsoft Data Access-onderdelen