Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Santrauka

Kai naudojate SQL Server ODBC tvarkyklė, SQL serverio OLE DB teikėjas arba System.Data.SqlClient valdomi teikėjas, galite išjungti ryšio buferizavimo naudojant atitinkamų taikomųjų programų programavimo sąsajas (API). Išjungus telkinio, stress pagrindinės SQL serverio tinklo bibliotekoje gali padidėti, jei jūsų programa dažnai atidaro ir nutraukia ryšius. Šiame straipsnyje aprašoma tam tikrus TCP/IP parametrus, jums gali tekti sureguliuoti šiomis sąlygomis.

Daugiau informacijos

Kaip išjungti kaupimą gali sukelti pagrindinės SQL serverio tinklo tvarkyklės greitai atidaryti ir uždaryti naujų jungčių ryšių į kompiuterį, kuriame veikia SQL serveris. Jums gali tekti pakeisti TCP/IP lizdą numatytieji operacinės sistemos ir kompiuterio, kuriame veikia SQL serveris spręsti stress didesnės.

Atkreipkite dėmesį, kad šiame straipsnyje aptariama tik parametrų, kurie veikia SQL serverio tinklo bibliotekos naudojant TCP/IP protokolą. Kaip išjungti kaupimą taip pat gali sukelti įtampos problemas su kita SQL Server protokolai, pvz., įvardytuosius kanalus, tačiau šiame straipsnyje neaptariamos šioje temoje. Šis straipsnis skirtas tik patyrusiems vartotojams. Jei jūs nesuprantate temos šiame straipsnyje, "Microsoft" rekomenduoja, kad matote gerą knygą apie TCP/IP lizdai.

Atkreipkite dėmesį, kad "Microsoft" primygtinai rekomenduoja visada naudoti telkinio SQL serverio tvarkyklių. Naudojant buferizavimo labai pagerėja bendras SQL serverio ir kliento naudojant SQL serverio tvarkykles. Naudojant buferizavimo taip pat žymiai sumažėja tinklo srautas į kompiuterį, kuriame veikia SQL Server. Pvz., pavyzdys testas, kuris naudojamas 20 000 SQL serverio ryšio atidaromas ir uždaromas dėl buferizavimo įgalintas naudojama apie 160 TCP/IP paketus, iš viso 23,520 baitų tinklo veikla. Su telkinio išjungta, tas pats pavyzdys bandymas sugeneruoti 225,129 TCP/IP tinklo paketus, iš viso 27,209,622 baitų tinklo veikla.

Atkreipkite dėmesį, kad pamatę šiuos stress TCP/IP lizdą problemos SQL serverio tinklo bibliotekos, galite gauti vieną ar kelis iš toliau pateiktų klaidų pranešimų bandant prisijungti prie kompiuterio, kuriame veikia SQL serveris:

SQL Server nėra arba prieiga uždrausta

Skirtasis laikas baigėsi

Bendrosios tinklo klaidos

TCP teikėjas: Naudoti tik vieną kartą kiekvieną lizdo adresą (protokolas/tinklo adresas/prievadas) paprastai negalima.

Atkreipkite dėmesį, kad taip pat gauti konkretų klaidos pranešimuose įvykus kitų problemų su SQL serverio; pavyzdžiui, galite gauti šių klaidos pranešimų jei nuotoliniame kompiuteryje, kuriame veikia SQL serveris yra išjungtas, jei nuotoliniame kompiuteryje, kuriame veikia SQL serveris yra ne klausytis TCP/IP lizdai, jei į kompiuterį, kuriame veikia SQL serverio tinklo ryšys nutrūksta dėl to, kad tinklo kabelis yra ištraukti, arba jei turite DNS skiriamosios gebos problemas. Iš esmės viską, kas gali sukelti nepavyksta atidaryti TCP/IP lizdą, prie kompiuterio, kuriame veikia SQL serverio klientas taip pat gali sukelti klaidų pranešimai. Vis dėlto su lizdas stress susijusi problema, problema kyla tik kartais įtampos padidėja ir sumažėja. Kompiuteris gali vykdyti keletą valandų be klaidų, tada klaida atsiranda vienas ar du kartus, ir kompiuterio, tada veikia keletą valandų be klaidų. Be to, kai kyla ši problema, bendrą ryšį su SQL Server veikia viena tiesioginiai, nepavyksta kitą, tada vėl veikia kiti tiesioginiai. Kitaip tariant, lizdas stress susijusios problemos paprastai atsiranda dingsta, bet reali kyla tinklo jungiamumo problemų su SQL serverio paprastai nėra dingsta.

Du pagrindiniai stress problemos paprastai atsiranda, kai išjungsite telkinio naudojant SQL Server TCP/IP protokolą: galite paleisti iš anoniminis prievadų kliento kompiuteryje, arba gali būti didesnė kaip numatytąją WinsockListenBacklog kompiuteryje, kuriame veikia SQL serveris.


Papildomos informacijos apie anonimiškai prievadus, spustelėkite toliau straipsnio numerį peržiūrėkite straipsnį Microsoft žinių bazėje:

319502 PRB: "WSAEADDRESSINUSE" klaidos pranešimas, kai bandote jungtis yra anoniminis prievado, po to, padidinate prisijungimų apribojimą IMAP

Parametrų MaxUserPort ir TcpTimedWaitDelay

Atkreipkite dėmesį, kad MaxUserPort ir TcpTimedWaitDelay parametrai taikomi tik kliento kompiuteryje, kuriame yra greitai atidaryti ir uždaryti jungimosi prie nuotolinio kompiuterio, kuriame veikia SQL Server ir, nenaudoja ryšio buferizavimas. Pavyzdžiui, šie parametrai taikomi interneto informacijos tarnybų (IIS) serveryje, kuriame priežiūros daug HTTP užklausų ir, atidarymo ir uždarymo jungimosi prie nuotolinio kompiuterio, kuriame veikia SQL Server ir kurios naudoja TCP/IP protokolą su telkinio išjungta. Jei buferizavimas yra įjungtas, turite nustatyti MaxUserPort ir TcpTimedWaitDelay parametrus.

Naudojant TCP/IP protokolą prisijungti prie kompiuterio, kuriame veikia SQL serveris, pagrindinės SQL serverio tinklo bibliotekos atidaromas TCP/IP lizdą, prie kompiuterio, kuriame veikia SQL serveris. Atsidarius šį lizdą, SQL serverio tinklo bibliotekos neleidžia parinktį SO_REUSEADDR TCP/IP lizdą. Daugiau informacijos apie SO_REUSEADDR lizdas parametrą, rasite "Nustatymo parinkties iškvietime" tema "Microsoft" programų kūrėjų tinklo (MSDN).


Atkreipkite dėmesį, kad SQL serverio tinklo bibliotekos specialiai neleidžia SO_REUSEADDR TCP/IP lizdą parinktis dėl saugos priežasčių. Kai SO_REUSEADDR yra įjungtas, kenkėjiškas vartotojas gali hijack kliento prievadas, prie SQL serverio ir šiuos kredencialus, kad kliento prieigos prie kompiuterio, kuriame veikia SQL serveris. Pagal numatytuosius parametrus, nes SQL serverio tinklo bibliotekos neleidžia SO_REUSEADDR lizdas parinktį, kiekvieną kartą, kai atidarote ir uždarykite lizdą iš SQL serverio tinklo bibliotekos kliento pusėje, lizdas pradeda veikti TIME_WAIT būsenos kelioms minutėms. Jei greitai atidarymą ir uždarymą SQL serverio ryšiai per TCP/IP naudojant buferizavimo išjungta, galite greitai atidarymas ir uždarymas TCP/IP lizdai. Kitaip tariant, kiekvieną SQL serverio ryšys yra vienas TCP/IP lizdą. Jei galite greitai atidaryti ir uždaryti 4000 jungčių mažiau nei keturias minutes pasieksite didžiausią numatytąją kliento anoniminis prievadams ir naują lizdą bandymų prisijungti nepavyksta iki esamą TIME_WAIT jungčių skirtasis laikas.

Kliento pusėje, gali tekti padidinti MaxUserPort ir TcpTimedWaitDelay parametrus, aprašytus Q319502, kai reikia sutelkti išjungti. Šias reikšmes parametrai nustatomi iš kiek SQL serverio ryšio atsidaro ir užsidaro kilti kliento pusėje. Galite patikrinti, kiek kliento prievadai yra TIME_WAIT būsenos naudojant įrankį Netstat kliento kompiuteryje. Paleisti įrankį Netstat -n vėliavėle taip ir suskaičiuoti kliento jungčių prie SQL serverio IP adresą, yra TIME_WAIT būsenos. Šiame pavyzdyje, nuotoliniame kompiuteryje, kuriame veikia SQL serverio IP adresas yra 10.10.10.20, kliento kompiuterio IP adresas yra 10.10.10.10 ir trys nustatyti ryšius ir dviejų yra TIME_WAIT būsenos:

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

Jei galite paleisti netstat n ir matote, kad greta 4000 į IP adresą, paskirties kompiuteryje, kuriame veikia SQL serverio yra TIME_WAIT būsenos, galite tiek padidinti MaxUserPort numatytąją ir sumažinti TcpTimedWaitDelay parametrą, kad paleisti iš kliento anoniminis prievadus. Pvz., galite nustatyti parametrą MaxUserPort 20000 ir TcpTimedWaitDelay nustatymą – 30. Mažesnis TcpTimedWaitDelay parametras reiškia, kad lizdų laukti TIME_WAIT būsenos greičiau. Didesnis parametras MaxUserPort reiškia, kad jūs galite turėti daugiau jungčių TIME_WAIT būsenos.

Atkreipkite dėmesį, kad jei nustatyti MaxUserPort arba TcpTimedWaitDelay , reikia paleisti iš Microsoft Windows naujas parametras įsigaliotų. MaxUserPort ir TcpTimedWaitDelay parametrai yra kliento kompiuterio, prie kompiuterio, kuriame veikia SQL serverio per TCP/IP lizdai kalba. Šiuos parametrus neturi jokios įtakos, jei jie yra nustatyti kompiuteryje, kuriame veikia SQL serveris, išskyrus atvejus, kai atliekate vietos TCP/IP lizdą ryšius į vietinį kompiuterį, kuriame veikia SQL serveris.

Pastaba. Jei MaxUserPort nustatyti, rekomenduojame, kad rezervuoti prievado 1434 naudoti SQL serverio naršyklės tarnyba (sqlbrowser.exe). Jei norite gauti daugiau informacijos apie tai, kaip tai padaryti, spustelėkite toliau straipsnio numerį ir peržiūrėkite straipsnį Microsoft žinių bazėje:

812873 kaip rezervuoti laikinosios prievadų grupę kompiuteryje, kuriame veikia Windows Server 2003 "arba" Windows 2000 Server

Nustatyti WinsockListenBacklog

Jei norite gauti papildomos informacijos apie šį specifinė SQL serverio registro parametrą, spustelėkite toliau straipsnio numerį peržiūrėkite straipsnį Microsoft žinių bazėje:

154628 INF: SQL registruoja 17832 su kelių TCP\IP ryšio užklausos
Kai SQL serverio tinklo bibliotekos klausosi TCP/IP lizduose, SQL serverio tinklo bibliotekos naudoja ir klausykitės Winsock API. Antrasis parametras, kad klausytis API yra lizdas leidžiama neatlikti darbai. Šis neatlikti darbai nurodo maksimalią eilėje laukiančių ryšius naudoti imtuvą. Kai eilės ilgis viršija šį didžiausią leistiną, SQL serverio tinklo bibliotekos iš karto atmeta daugiau TCP/IP lizdą bandymų prisijungti. Be to, SQL serverio tinklo bibliotekos siunčia ACK + suteikimo paketų.

SQL Server 2000 naudoja numatytąjį klausykitės neatlikti darbai parametras 5. Tai reiškia, kad kompiuteryje, kuriame veikia SQL serverio perduoda reikšmę 5 parametrą užduočių sąrašą, kad klausytis Winsock API kai toliau klausytis API nustato TCP/IP protokolą klausytis pokalbių kompiuteryje, kuriame veikia SQL serveris. Galite koreguoti WinsockListenBacklog registro raktą norėdami nurodyti kitą perduoti šio parametro reikšmė. Nuo SQL Server 2005 m. tinklo bibliotekos perduoda SOMAXCONN reikšmę kaip neatlikti darbai, klausytis API. SOMAXCONN leidžia nustatyti didžiausią reikšmės, šis parametras Winsock teikėjas. Todėl WinsockListenBacklog registro raktas yra nebenaudojamas arba reikia SQL Server 2005.

Užduočių sąrašą, nustatymas veikia taip: Tarkime, kad tai laisvuosius tarnybos klausosi gaunamas TCP/IP lizdą užklausas. Jei nustatote parametrą neatlikti darbai 5 ir daug jungčių ryšio užklausos nuolat transliacijos, paslauga gali nepavykti atsakyti į gaunamus prašymus taip greitai, kaip jie. Šiuo metu TCP/IP lizdą lygmens eilių šiuos gaunamų užklausų neatlikti darbai eilėje, o tarnyba vėliau ištraukite užklausas iš šios eilės ir gaunamo lizdas ryšio užklausą. Po to, kai eilėje užpildo, TCP/IP jungčių lygmuo iš karto atmeta papildomų jungčių užklausų, kad siųsdami, ACK + nustatymas iš naujo paketo klientui. Padidinti skaičių iki lizdo jungtis reikalauja, kad TCP/IP lizdą lygmens eilių prieš prašymai yra atmetami neatlikti darbai eilėje dydis didėja.

Atkreipkite dėmesį, WinsockListenBacklog parametras, skirtas SQL Server. SQL serverio bando skaityti šį registro parametrą, pirmą kartą paleidus SQL serverio paslaugą. Jei parametro nėra, naudojamas numatytasis 5. Jei registro parametrą, SQL serverio nuskaito parametrą ir naudoja pateikta reikšmę kaip parametrą užduočių sąrašą, kai WinSock API klausytis vadinamas taip, kaip nustatyti TCP/IP lizdą klausytis pokalbių vidinis SQL serverio.

Norėdami nustatyti, ar jūsų kompiuteryje veikia į šią problemą, galite paleisti tinklo monitoriaus sekimo kliento arba kompiuterio, kuriame veikia SQL serveris ir ieškoti lizdas ryšio užklausos, kurios yra iš karto atmestas ACK + iš naujo. Patikrinę TCP/IP paketus tinklo monitoriuje, ši problema vyksta nematote paketas, pvz.:

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)

Dėmesį, kad šaltinio prievado 0x599 arba 1433 į dešimtainę. Tai reiškia, kad paketas yra iš įprasto kompiuterio, kuriame veikia SQL serverio ir kad veikia numatytasis prievadas, 1433. Taip pat Atkreipkite dėmesį, kad patvirtinimo laukas svarbus ir iš naujo nustatyti ryšį žymių nustatyti. Jei esate susipažinę su filtravimo tinklo monitoriaus sekimo, galite filtruoti TCP Flags reikšmė 0x14 šešioliktainis matyti tik ACK + suteikimo paketai tinklo monitoriaus sekimo.

Atkreipkite dėmesį, kad taip pat galite matyti panašų ACK + suteikimo paketus arba jei kompiuterį, kuriame veikia SQL serverio ne klausytis TCP / IP, todėl matyti ACK + suteikimo paketus nėra aiškią patvirtinimą, kad ši problema kyla kompiuteryje, kuriame veikia SQL Server veikia ne visi. Jei WinsockListenBacklog yra per mažas, kai bando gauti ryšio priimti paketus ir kai kurių ryšiai iš karto gauti ACK + nustatymas iš naujo paketus į tą patį laiką.

Atkreipkite dėmesį, kad labai retais atvejais, turite nustatyti šį parametrą, net jei buferizavimo įgalintas kliento kompiuteryje. Pvz., jei viename kompiuteryje, kuriame veikia SQL serveris kalbėti daug kliento kompiuteryje, daug vienu metu gaunamų bandymų prisijungti gali kilti bet kuriuo metu ypač net jei buferizavimas yra įjungtas.

Pastaba. Jei nustatyti WinsockListenBacklog , jums nereikia iš naujo paleisti "Windows", šis parametras įsigaliotų. Tiesiog sustabdyti ir iš naujo paleisti SQL serverio paslaugą, kad parametras įsigaliotų. WinsockListenBacklog registro parametras yra tik kompiuteryje, kuriame veikia SQL serveris. Tai neturi jokios įtakos, kalba ir SQL serverio kliento kompiuteryje.

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×