FIX: Time-outfout bij een gespiegelde databaseverbinding wordt gemaakt door het .NET Framework data provider voor SQLClient

BELANGRIJK: Dit artikel is vertaald door middel van automatische vertalingssoftware van Microsoft en is mogelijk nabewerkt door de Microsoft Community via CTF-technologie (Community Translation Framework) of door een menselijke vertaler. Microsoft biedt zowel automatisch vertaalde, door mensen vertaalde en door de community nabewerkte artikelen aan, zodat er in meerdere talen toegang is tot alle artikelen in onze Knowledge Base. Een vertaald of bewerkt artikel kan fouten bevatten in vocabulaire, syntaxis of grammatica.. Microsoft is niet verantwoordelijk voor eventuele onjuistheden, fouten of schade ten gevolge van een foute vertaling van de inhoud van een bericht of het gebruik van deze vertaalde berichten door onze klanten.

De Engelstalige versie van dit artikel is de volgende: 2605597
Symptomen
Wanneer u een toepassing gebruikt de Microsoft.NET Framework 3.5 of 4 van Microsoft .NET Framework data provider voor Microsoft SQL Server (SQLClient) verbinding maken met een gespiegelde database, wordt het volgende foutbericht weergegeven:
Time-out is verlopen. De time-outperiode is verstreken voordat de bewerking is voltooid of de server reageert niet.
bij System.Data.SqlClient.SqlInternalConnection.OnError (SqlException uitzondering, Boolean breakConnection)
op System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
bij System.Data.SqlClient.TdsParserStateObject.ReadSniError (TdsParserStateObject, stateObj, UInt32-fout)
bij System.Data.SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj)
op System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
op System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake (Boolean coderen, Boolean trustServerCert, Boolean & marsCapable)
bij System.Data.SqlClient.TdsParser.Connect (ServerInfo, serverInfo, connHandler, SqlInternalConnectionTds, Boolean ignoreSniOpenTimeout, timerExpire, Int64, Boolean codeert, Boolean trustServerCert, Boolean integratedSecurity)
bij System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo, NieuwWachtwoord String, Boolean ignoreSniOpenTimeout, TimeoutTimer-out, SqlConnection owningObject)
op System.Data.SqlClient.SqlInternalConnectionTds.LoginWithFailover (Boolean useFailoverHost, ServerInfo, primaryServerInfo, String failoverHost, NieuwWachtwoord String, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer-out)
Opmerking Als de eigenschap ConnectionTimeout is ingesteld op de standaardwaarde van 15 seconden, wordt het foutbericht weergegeven nadat de verbinding geopend voor 1,2 seconden is.
Oorzaak
Dit probleem treedt op vanwege een fout in het opnieuw-verbinden algoritme voor mirrored databases.

Als u het opnieuw proberen-algoritme gebruikt, wacht de gegevensprovider voor de eerste oproep lezen (SniReadSync) te voltooien. De oproep wordt verzonden naar de back-end-computer waarop SQL Server wordt uitgevoerd en de wachttijd wordt berekend door vermenigvuldiging van de waarde voor time-out van verbinding met 0.08. Echter stelt de gegevensprovider onjuist een verbinding naar een staat geen succesvolle implementatie als een antwoord traag is en als de eerste aanroep van SniReadSync niet is voltooid voordat de wachttijd is verstreken.

Opmerking De trage reactie kan in dit geval worden veroorzaakt door de server of door netwerkvertraging.
Oplossing
Dit probleem wordt opgelost in .NET Framework 4.5.2. Naast het .NET Framework 4.5.2 zijn er hotfixes beschikbaar voor andere versies van .NET Framework zoals beschreven in het volgende gedeelte.

Informatie over de hotfix

Een ondersteunde hotfix is beschikbaar bij Microsoft. Deze hotfix is echter alleen bedoeld voor het probleem dat wordt beschreven in dit artikel. Voer deze hotfix alleen uit op systemen waarop de in dit artikel beschreven problemen zich voordoen. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige problemen ondervindt, is het daarom raadzaam te wachten op de volgende update waarin deze hotfix is opgenomen.

Als de hotfix gedownload kan worden, is er een sectie 'Hotfix downloaden' aan het begin van dit Knowledge Base-artikel. Als deze sectie niet wordt weergegeven, neem dan contact op met Microsoft Customer Service and Support om de hotfix te verkrijgen.

Opmerking Als er andere problemen optreden of als probleemoplossing is vereist, moet u wellicht een apart serviceverzoek indienen. De normale ondersteuningskosten gelden voor extra ondersteuningsvragen en problemen die niet in aanmerking komen voor deze specifieke hotfix. Voor een volledige lijst met telefoonnummers van Microsoft Customer Service and Support of om een afzonderlijk serviceverzoek aan te maken, gaat u naar de volgende Microsoft-website: Opmerking Het formulier 'Hotfix kan worden gedownload' geeft de talen weer waarvoor de hotfix beschikbaar is. Als uw taal niet wordt weergegeven, is dit omdat een hotfix niet voor die taal beschikbaar is.

Vereisten

Er zijn twee hotixes voor dit probleem. Een hotfix van toepassing is op het .NET Framework 3.5.1 en een hotfix van toepassing is op het .NET Framework 4.0. U kunt de hotfix voor Microsoft .NET Framework 3.5.1 hebt u het .NET Framework 3.5.1 op een computer waarop een van de volgende besturingssystemen is geïnstalleerd:
  • Windows 7 servicepack 1 (SP1)
  • Windows Server 2008 R2 servicepack 1 (SP1)
Opmerking De functie van .NET Framework 3.5.1 bevat het Microsoft .NET Framework 2.0 servicepack 2 (SP2).

Opnieuw opstarten

U hoeft de computer niet opnieuw op te starten nadat u deze hotfix hebt toegepast.

Informatie over het vervangen van hotfixes

Deze hotfix vervangt geen eerder uitgebrachte hotfix.

Bestandsinformatie

De algemene versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Om het verschil tussen UTC en lokale tijd op te zoeken, gebruikt u het tabblad tijdzone in het onderdeel datum en tijd in het Configuratiescherm.

Bestandsgegevens voor de .net Framework 3.5.1-onderdelen

Voor alle ondersteunde x 86-versies van Windows 7
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll2.0.50727.56972,927,61630-Sep-201122:34x86
Voor alle ondersteunde x 64-versies van Windows 7 en Windows Server 2008 R2
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll2.0.50727.56973,095,55230-Sep-201122:28x64
Voor alle ondersteunde IA-64-versies van Windows Server 2008 R2
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll2.0.50727.56973,234,81630-Sep-201122:21IA-64

Bestandsgegevens voor de .net Framework 4.0

Voor alle ondersteunde x86-versies van Windows 7
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll4.0.30319.5453,027,72816-Dec-201107:59x86
Voor alle ondersteunde x 64-versies van Windows 7 en Windows Server 2008 R2
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll4.0.30319.5453,174,16016-Dec-201108:37x64
Voor alle ondersteunde IA-64-versies van Windows Server 2008 R2
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
System.Data.dll4.0.30319.5453,366,16016-Dec-201109:16IA-64
Opmerking Dit probleem wordt opgelost in Microsoft .NET Framework 4.5.2. Daarom, voor de gegevensprovider .NET Framework 4 .NET Framework 4 om te upgraden het .NET Framework 4.5.2 een andere oplossing is.
Workaround
Om dit probleem te omzeilen, gebruikt u een van de volgende methoden:
  • De verbindingsreeks time-out ingesteld op 150 waarde die een tijd van 150 seconden ingesteld. Wanneer u dit doet, wacht de gegevensprovider 12 seconden te voltooien met de eerste aanroep lezen. (Het probleem treedt niet op als de aanroep is voltooid binnen 12 seconden.)
  • Toevoegen de minimumgroepsgrootte = 20 instellen op de verbindingsreeks. Nadat u deze instelling hebt toegevoegd, houdt de gegevensprovider ten minste 20 verbindingen in de groep gegevens van de toepassing. Daarom dienen meer kansen te gebruiken van een bestaande verbinding in plaats van een nieuwe verbinding openen. En als u een bestaande verbinding gebruikt, ontvangt u geen de foutberichten die worden vermeld in de sectie 'Symptomen'.

    Opmerking: Min. grootte van de standaardwaarde is 0.
Meer informatie
De volgende schermafdruk geeft een netwerk vastleggen tussen de App Server en SQL Server op het moment dat het probleem is opgetreden in een Testscenario:



In dit voorbeeld kunt zien we dat de App Server wordt de verbinding (pakket Frame 670 AF) ongeveer één seconde in de fase van de eerste verbinding (TDS:Prelogin gesloten). Wanneer de SQL-Server op vijf seconden reageert, dit antwoord is te laat en de client de verbinding wordt hersteld. Zoals vermeld in de sectie 'Oorzaak', wanneer de time-out is ingesteld op 15 seconden (de standaardwaarde), de werkelijke verbindingstime-out die wordt berekend door de verbinding opnieuw algoritme voor mirroring gelijk is aan 1,2 seconde (. 08 * 15).

Het volgende is een BOD traceren dat is vastgelegd in de test App Server:

<prov.DbConnectionHelper.ConnectionString_Set|API> 1#, 'Data Source=MySQLServer;Failover Partner=MySQLServer2; Initial Catalog= TestMirror;Integrated Security=SSPI;Connection Timeout=15'enter_02 <SNIReadSync|API|SNI> 2#{SNI_Conn}, pConn: 007D9EA8{SNI_Conn*}, ppNewPacket: 0671E268{SNI_Packet**}, timeout: 1134enter_03 <Np::ReadSync|API|SNI> 3#, ppNewPacket: 0671E268{SNI_Packet**}, iTimeOut: 1134<SNI_Packet::SNIPacketAllocateEx2|API|SNI> pConn: 007D9EA8{SNI_Conn*}, IOType: 0, consumer: 0<SNI_Packet::SNIPacketNew|API|SNI> pConn: 007D9EA8{SNI_Conn*}, IOType: 0ObtainIDa 5# <SNI_Packet::SNI_Packet|ID|SNI> 0624EEF0{.}<SNI_Packet::SNI_Packet|SNI> 5#{SNI_Packet} created by 2#{SNI_Conn}<SNI_Packet::SNIPacketNew|RET|SNI> 0624EEF0{SNI_Packet*}<SNI_Packet::SNIPacketAllocateEx2|RET|SNI> 0624EEF0{SNI_Packet*}<Np::ReadSync|ERR|SNI> ProviderNum: 4{ProviderNum}, SNIError: 11{SNIError}, NativeError: 258{WINERR}<Np::ReadSync|RET|SNI> 258{WINERR}leave_03<SNIReadSync|RET|SNI> 258{WINERR}, Packet: 00000000leave_02<sc.SqlError.SqlError|ERR> infoNumber=-2, errorState=0, errorClass=11, errorMessage='Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.', procedure='', lineNumber=0<sc.SqlInternalConnectionTds.BreakConnection|RES|CPOOL> 4#, Breaking connection.<prov.DbConnectionInternal.|RES|INFO|CPOOL> 4#, Dooming<sc.SqlInternalConnectionTds.LoginFailure|RES|CPOOL> 4# DoomThisConnection|RES|INFO|CPOOL> 4#, Dooming<sc.SqlInternalConnectionTds.LoginFailure|RES|CPOOL> 4#
Op dezelfde manier als u de connectiviteit ringbuffer voor Timers voor aanmelding op de SQL Server bekijkt, ziet u dat de aanmelding een in een korte tijdsduur in milliseconden time-out.

Als u de uitvoer van de buffer ring van Management Studio, voeren de volgende query:

SELECT CAST(record AS XML) FROM sys.dm_os_ring_buffers WHERE ring_buffer_type = 'RING_BUFFER_CONNECTIVITY'

Referenties
Ga naar de volgende MSDN-website voor meer informatie over de eigenschap SqlConnection.ConnectionTimeout :Voor meer informatie over de verbinding opnieuw algoritme voor TCP/IP-verbindingen, gaat u naar de volgende MSDN-website:Ga naar de volgende MSDN-website voor meer informatie over de System.Data.SqlClient -naamruimte:Voor meer informatie over database-mirroring, gaat u naar de volgende MSDN-website:

Koeling; SQL Server. NET SqlClient-Provider


Status
Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Waarschuwing: dit artikel is automatisch vertaald

Eigenschappen

Artikel-id: 2605597 - Laatst bijgewerkt: 07/25/2015 13:42:00 - Revisie: 4.0

Microsoft .NET Framework 3.5 Service Pack 1, Microsoft .NET Framework 4.0, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2008 Enterprise Evaluation, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Standard Edition

  • kbqfe kbHotfixServer kbfix kbexpertiseadvanced kbsurveynew kbmt KB2605597 KbMtnl
Feedback