Samenvatting

Als u de SQL Server ODBC-stuurprogramma of de SQL Server OLE DB-provider de System.Data.SqlClient managed provider, kunt u uitschakelen groepsgewijze verbindingen met behulp van de respectieve application programming interfaces (API's). Wanneer u groepsgewijze uitschakelt, wordt de spanning op de onderliggende SQL Server-netwerkbibliotheek verhoogd als de toepassing regelmatig wordt geopend en verbindingen gesloten. In dit artikel wordt beschreven dat bepaalde TCP/IP-instellingen die u hebt aangepast onder deze omstandigheden.

Meer informatie

Het uitschakelen van het groeperen kan leiden tot het onderliggende stuurprogramma SQL Server snel openen en sluiten van nieuwe socketverbindingen met de computer waarop SQL Server wordt uitgevoerd. Mogelijk moet de TCP/IP-socket standaardinstellingen wijzigen voor het besturingssysteem en de computer waarop SQL Server met de hogere niveaus van stress.

Houd er rekening mee dat dit artikel alleen instellingen die van invloed zijn op de SQL Server-netwerkbibliotheek wanneer u het TCP/IP-protocol gebruikt worden. Het uitschakelen van het groeperen kan ook stress-gerelateerde problemen veroorzaken met andere SQL Server-protocollen zoals named pipes, maar in dit artikel wordt niet beschreven in dit onderwerp. Dit artikel is alleen voor ervaren gebruikers. Als u meer de onderwerpen in dit artikel weten wilt, wordt aangeraden dat u een goed boek over TCP/IP-sockets te zien.

Houd er rekening mee dat u wordt aangeraden dat u altijd gebruikt met de SQL Server-stuurprogramma's groeperen. Met behulp van pooling aanzienlijk verbetert de prestaties op de client-side en de SQL Server-side wanneer u de SQL Server-stuurprogramma's gebruikt. Gebruik ook aanzienlijk pooling wordt het netwerkverkeer verminderd met de computer waarop SQL Server wordt uitgevoerd. Zo gebruikt een test waarmee 20.000 SQL Server verbinding geopend en gesloten met pooling ingeschakeld ongeveer 160 TCP/IP-netwerkpakketten, voor een totaal van 23,520 bytes van de activiteit op het netwerk. Dezelfde test sample gegenereerd met pooling uitgeschakeld, 225,129 TCP/IP-pakketten, voor een totaal van 27,209,622 bytes van de activiteit op het netwerk.

Houd er rekening mee dat wanneer u deze stress TCP/IP-socket problemen met de SQL Server-netwerkbibliotheken ziet, wordt een of meer van de volgende foutberichten weergegeven wanneer u verbinding maakt met een computer waarop SQL Server wordt uitgevoerd:

SQL Server bestaat niet of toegang geweigerd

Time-out is verlopen

Algemene netwerkfout

TCP-Provider: Slechts één gebruik van elke socketadres (protocol/netwerk adres/poort) is normaal toegestaan.

Opmerking u kunt ook deze specifieke foutberichten ontvangen als er andere problemen optreden met SQL Server. bijvoorbeeld, verschijnt deze foutberichten worden weergegeven als de externe computer waarop SQL Server wordt afgesloten als de externe computer waarop SQL Server luistert niet naar TCP/IP-sockets, als de netwerkverbinding met de computer waarop SQL Server wordt verbroken, omdat de netwerkkabel wordt getrokken uit, of als u ondervindt problemen met DNS-naamomzetting. In principe kan iets waardoor de client voor het openen van een TCP/IP-socket op de computer waarop SQL Server wordt uitgevoerd ook de foutberichten veroorzaken. Echter met een socket stress gerelateerd probleem, het probleem doet zich af en toe als de stress stijgt en valt. De computer kan worden uitgevoerd voor uren zonder fouten, en vervolgens de fout treedt één of twee keer, en de computer vervolgens wordt uitgevoerd voor verschillende meer uren zonder fouten. Ook als u dit probleem hebt, algemene verbinding met SQL Server werkt een instant, mislukt de volgende en nogmaals het volgende moment werkt. Met andere woorden, socket stress-gerelateerde problemen kunnen optreden sporadisch, maar echte problemen met netwerkverbindingen met SQL Server doorgaans niet vallen sporadisch.

Twee belangrijkste stress-gerelateerde problemen kunnen optreden wanneer u groepsgewijze tijdens het gebruik van het SQL Server TCP/IP-protocol uitschakelt: U anonieme poort kunt uitvoeren op de client of de standaardinstelling voor WinsockListenBacklog op de computer waarop SQL Server wordt overschreden.


Voor meer informatie over poorten anonieme, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

319502 PRB: Foutbericht 'WSAEADDRESSINUSE' wanneer u probeert via een anonieme poort verbinding maken nadat u de verbindingslimiet IMAP

Pas de instellingen MaxUserPort en TcpTimedWaitDelay

Merk op dat de MaxUserPort en TcpTimedWaitDelay instellingen zijn alleen van toepassing op een clientcomputer die is snel openen en sluiten van verbindingen met een externe computer waarop SQL Server en die wordt gebruikt niet groepsgewijze verbindingen. Deze instellingen zijn bijvoorbeeld van toepassing op een server met Internet Information Services (IIS) die voor een groot aantal binnenkomende HTTP-aanvragen is onderhoud en dat is openen en sluiten van verbindingen met een externe computer waarop SQL Server wordt uitgevoerd en waarop het TCP/IP-protocol met pooling uitgeschakeld. Als het groeperen van verbindingen is ingeschakeld, hoeft u niet de MaxUserPort en TcpTimedWaitDelay instellingen aanpassen.

Wanneer u het TCP/IP-protocol gebruikt voor het openen van een verbinding met een computer waarop SQL Server wordt uitgevoerd, opent u de onderliggende SQL Server-netwerkbibliotheek een TCP/IP-socket op de computer waarop SQL Server wordt uitgevoerd. Wanneer deze socket wordt geopend, wordt de SQL Server-netwerkbibliotheek optie SO_REUSEADDR TCP/IP-socket niet ingeschakeld. Zie het onderwerp 'Setsockopt' in de Microsoft Developer Network (MSDN) voor meer informatie over de instelling van de socket SO_REUSEADDR .


Houd er rekening mee dat de SQL Server-netwerkbibliotheek specifiek heeft niet de mogelijkheid de optie SO_REUSEADDR TCP/IP-Sockets om veiligheidsredenen. Wanneer SO_REUSEADDR is ingeschakeld, kan een kwaadwillende gebruiker een clientpoort naar SQL Server overnemen en de referenties waarmee de client toegang krijgen tot de computer waarop SQL Server wordt gebruikt. Standaard, omdat de SQL Server-netwerkbibliotheek optie SO_REUSEADDR socket niet mogelijk elke keer dat u opent en sluit een socket door de SQL Server-netwerkbibliotheek op de client voert de socket een toestand TIME_WAIT heeft voor vier minuten. Als u snel openen en sluiten van de SQL Server-verbindingen via TCP/IP met pooling uitgeschakeld, bent u snel openen en sluiten van TCP/IP-sockets. Elke SQL Server-verbinding heeft met andere woorden, een TCP/IP-socket. Als u snel openen en sluiten van 4000 sockets in minder dan vier minuten u de maximale standaardinstelling voor anonieme poorten op de client wordt bereikt en nieuwe socket verbindingspogingen tot mislukken de bestaande set sockets toestand TIME_WAIT geblokkeerd.

Op de client, moet u wellicht de instellingen voor MaxUserPort en TcpTimedWaitDelay die worden besproken in Q319502 wanneer u groepsgewijze uitgeschakeld. De instellingen voor deze waarden worden bepaald door het aantal SQL Server-verbinding wordt geopend en gesloten op de client optreden. U kunt controleren hoeveel poorten op de client zich in een toestand TIME_WAIT heeft met behulp van het hulpprogramma Netstat op de clientcomputer. Het hulpprogramma Netstat als volgt met de -n vlag voeren en tel het aantal client-sockets op uw SQL Server-IP-adres in een toestand TIME_WAIT heeft. In dit voorbeeld wordt het IP-adres van de externe computer waarop SQL Server is 10.10.10.20, het IP-adres van de client is 10.10.10.10 en drie verbindingen en twee verbindingen zijn in een toestand TIME_WAIT heeft vastgesteld:

C:\>netstat -n
Active Connections

Proto Local Address Foreign Address State
TCP 10.10.10.10:2000 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2001 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2002 10.10.10.20:1433 ESTABLISHED
TCP 10.10.10.10:2003 10.10.10.20:1433 TIME_WAIT
TCP 10.10.10.10:2004 10.10.10.20:1433 TIME_WAIT

Als u netstat - n uitvoert en u ziet dat bijna 4000 verbindingen met het IP-adres van de doelcomputer waarop SQL Server wordt uitgevoerd in een toestand TIME_WAIT heeft, kunt u zowel Verhoog de standaardinstelling MaxUserPort en verlaagt u de instelling TcpTimedWaitDelay zodat uit te van anonieme poorten op de client voeren. U kunt bijvoorbeeld de MaxUserPort instelt op 20000 en de TcpTimedWaitDelay instelt op 30. Een lagere instelling van TcpTimedWaitDelay betekent dat de sockets wachten tot de toestand TIME_WAIT heeft minder tijd. Een hogere instelling voor MaxUserPort betekent dat u kunt meer sockets de toestand TIME_WAIT heeft.

Opmerking Als u de instelling MaxUserPort of TcpTimedWaitDelay aanpast, moet u Microsoft Windows voor de nieuwe instelling pas van kracht herstarten. De MaxUserPort en TcpTimedWaitDelay instellingen zijn voor elke clientcomputer die communiceert met een computer waarop SQL-Server via TCP/IP-sockets. Deze instellingen geen effect als ze zijn ingesteld op de computer waarop SQL Server wordt uitgevoerd, tenzij u lokale TCP/IP-socketverbindingen maken met de computer waarop SQL Server wordt uitgevoerd.

Opmerking Als u de MaxUserPort aanpast, is het raadzaam u poort 1434 reserveren door de SQL Server-browserservice (sqlbrowser.exe). Voor meer informatie over hoe u dit doet, klikt u op het volgende artikel in de Microsoft Knowledge Base:

812873 het reserveren van een reeks tijdelijke poorten op een computer waarop Windows Server 2003 of Windows 2000 Server

Pas de instelling WinsockListenBacklog

Voor meer informatie over deze specifieke SQL Server-registerinstelling, klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base:

154628 , INF: SQL 17832 zich met meerdere TCP\IP verbindingsaanvragen
Wanneer de SQL Server-netwerkbibliotheek op TCP/IP-sockets luistert, wordt de SQL Server-netwerkbibliotheek het luisteren Winsock-API. De tweede parameter voor het luisteren API is de reserve die is toegestaan voor de socket. Deze reserve geeft de maximale lengte van de wachtrij van verbindingen voor de listener. Als de lengte van de wachtrij groter is dan deze maximale lengte, weigert de SQL Server-netwerkbibliotheek onmiddellijk meer verbindingspogingen van TCP/IP-socket. Ook verzendt de SQL Server-netwerkbibliotheek een ACK + RESET-pakket.

SQL Server 2000 gebruikt een standaard luisteren instelling reserve van 5. Dit betekent dat de computer waarop SQL Server wordt de waarde 5 doorgegeven aan de reserve-parameter van het luisteren Winsock-API zodra u de API luisteren stelt de TCP/IP-protocol threads luisteren op de computer waarop SQL Server wordt uitgevoerd. U kunt de registersleutel WinsockListenBacklog om op te geven van een andere waarde voor deze parameter worden doorgegeven. Starten in SQL Server 2005, geeft de netwerkbibliotheek een waarde van SOMAXCONN als de instelling van de reserve aan het luisteren API. SOMAXCONN kan de Winsock-provider voor het instellen van een redelijke maximale waarde voor deze instelling. Daarom wordt de registersleutel WinsockListenBacklog niet meer gebruikt of nodig is in SQL Server 2005.

De reserve werkt als volgt instellen: Stel dat een willekeurige service voor binnenkomende aanvragen voor TCP/IP-sockets luistert. Als u de reserve op 5 instelt en veel socket verbindingsaanvragen worden voortdurend streaming, de service niet mogelijk om te reageren op de inkomende aanvragen zo snel als ze binnenkomen. Op dit moment de TCP/IP-socket layer wachtrijen voor de binnenkomende verzoeken in de wachtrij van de reserve en de service later kunt halen de aanvragen uit deze wachtrij en verwerkt de binnenkomende aanvraag socket. Wanneer de wachtrij vol raakt, het TCP/IP-socket layer onmiddellijk extra socket verzoeken geweigerd die binnenkomen via een ACK + RESET-pakket terug naar de client. Verhoging van de reserve wachtrij groter die het aantal in behandeling zijnde socketverbinding aanvragen dat de TCP/IP-socket layer wachtrij geplaatst voordat er aanvragen worden geweigerd.

Houd er rekening mee dat de WinsockListenBacklog -instelling specifiek voor SQL Server is. SQL Server probeert te lezen van deze registerinstelling wanneer de SQL Server-service voor het eerst wordt gestart. Als de instelling niet bestaat, wordt de standaardwaarde van 5 gebruikt. Als de registerinstelling bestaat, SQL Server leest de instelling en de opgegeven waarde wordt gebruikt als de reserve-instelling bij het luisteren van de WinSock-API wordt aangeroepen als de TCP/IP-sockets luistert threads zijn omhoog in SQL Server.

Om te bepalen als u dit probleem, kunt u een netwerkcontrole-trace uitvoert op de client of de computer waarop SQL Server wordt uitgevoerd en zoek socket verbindingsaanvragen die onmiddellijk worden afgewezen met een ACK + RESET. Als u TCP/IP-pakketten in Netwerkcontrole bekijkt, ziet u een pakket zoals het volgende wanneer dit probleem zich voordoet:

Frame: Base frame propertiesETHERNET:  EType = Internet IP (IPv4) 
IP: Protocol = TCP - Transmission Control; Packet ID = 40530; Total IP Length = 40; Options = No Options
TCP: Control Bits: .A.R.., len: 0, seq: 0-0, ack:3409265780, win: 0, src: 1433 dst: 4364
TCP: Source Port = 0x0599
TCP: Destination Port = 0x110C
TCP: Sequence Number = 0 (0x0)
TCP: Acknowledgement Number = 3409265780 (0xCB354474)
TCP: Data Offset = 20 bytes
TCP: Flags = 0x14 : .A.R..
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....1.. = Reset the connection
TCP: ......0. = No Synchronize
TCP: .......0 = Not the end of the data
TCP: Window = 0 (0x0)
TCP: Checksum = 0xF1E7
TCP: Urgent Pointer = 0 (0x0)

Let erop dat de bronpoort 0x599 of 1433 in decimale notatie. Dit betekent dat het pakket afkomstig is van een normale computer met SQL Server en die wordt uitgevoerd op de standaardpoort van 1433. Rekening mee dat het veld van bevestiging significant en de vlaggen van de verbinding opnieuw ingesteld. Als u bekend bent met een netwerkcontrole-trace filteren, kunt u de TCP vlaggen waarde filteren op 0x14 hexadecimale zien alleen de ACK + RESET-pakketten in Netwerkcontrole-trace.

Let op: u kunt ook vergelijkbare ACK + RESET-pakketten als de computer waarop SQL Server wordt helemaal niet wordt uitgevoerd of als de computer waarop SQL Server niet naar TCP/IP-protocol, luistert ACK + RESET-pakketten kan zien en is dus niet duidelijk bevestigen dat u dit probleem ondervindt. Als de WinsockListenBacklog te laag is, sommige verbinding pogingen ontvangen pakketten accepteren en sommige verbindingen ontvangen onmiddellijk ACK + RESET-pakketten in de.

Houd er rekening mee dat in zeer zeldzame gevallen kan er op deze instelling aanpassen, zelfs als pooling is ingeschakeld op de clientcomputers. Bijvoorbeeld, als een groot aantal clientcomputers wordt gesproken op een enkele computer waarop SQL Server wordt uitgevoerd, kan een groot aantal gelijktijdige pogingen tot binnenkomende verbindingen optreden op een bepaald moment zelfs als het groeperen van verbindingen is ingeschakeld.

Opmerking Als u de instelling van de WinsockListenBacklog aanpassen, hoeft u niet aan Windows opnieuw opstarten om deze instelling te activeren. Net stop en start de service SQL Server voor de instelling van kracht te laten worden. De registerinstelling WinsockListenBacklog is alleen voor de computer waarop SQL Server wordt uitgevoerd. Dit heeft geen effect op elke clientcomputer die met SQL Server communiceert.

Meer hulp nodig?

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Microsoft insiders

Was deze informatie nuttig?

Hoe tevreden bent u met de vertaalkwaliteit?
Wat heeft uw ervaring beïnvloed?

Bedankt voor uw feedback.

×