Преминаване към основното съдържание
Поддръжка
Влизане с Microsoft
Влезте или създайте акаунт.
Здравейте,
Изберете друг акаунт.
Имате няколко акаунта
Изберете акаунта, с който искате да влезете.

Резюме

Когато използвате SQL Server ODBC драйвер, SQL Server OLE DB доставчика или System.Data.SqlClient управляем доставчик, можете да изключите връзката обмен чрез съответните интерфейси за приложно програмиране (APIs). Когато забраните обединяването, натоварването на използваната мрежа библиотеката SQL Server може да се увеличи, ако вашето приложение често се отваря и затваря връзки. Тази статия описва някои TCP/IP настройки, които може да се наложи да промените в тези условия.

Допълнителна информация

Изключване на обединяване може да доведе до основните SQL Server мрежов драйвер за бързо отваряне и затваряне на нови връзки на сокет към компютъра, на който работи SQL Server. Може да се наложи да промените настройките по подразбиране TCP/IP гнездо за операционната система и компютърът, на който работи SQL Server да се справят с по-високи нива на стрес.

Имайте предвид, че тази статия се обсъждат само настройките, които засягат мрежа библиотеката на SQL Server, когато използвате протокола TCP/IP. Изключване на обединяване може да предизвика стрес проблеми с други протоколи за SQL Server като именувани канали, но тази статия не се обсъждат в тази тема. Тази статия е само за напреднали потребители. Ако не разбират темите в тази статия, Microsoft препоръчва да видите добра книга за TCP/IP контакти.

Отбележете, че Microsoft настоятелно препоръчва винаги да се използва групиране с драйверите на SQL Server. Използването на обединяване значително подобрява цялостната производителност на SQL сървъра и клиента, когато използвате драйвери за SQL Server. Използване на обединяване и значително намалява мрежовия трафик на компютър, на който работи SQL Server. Например примерен тест, който използва 20000 SQL Server връзката се отваря и затваря с обединяване разрешено използва около 160 TCP/IP мрежа пакети, общо 23,520 байта на мрежата. С обединяването забранена, тест на една и съща проба генерира 225,129 TCP/IP мрежа пакети, общо 27,209,622 байта на мрежата.

Обърнете внимание, че когато видите стрес TCP/IP гнездо проблемите с мрежата библиотеките на SQL Server, може да получите едно или повече от следните съобщения за грешка при опит за свързване с компютър, на който работи SQL Server:

SQL сървърът не съществува или достъпът е отказан

Времето на изчакване изтече

Обща грешка в мрежата

TCP доставчик: Обикновено е разрешено само един използване на всеки адрес на сокет (протокол/мрежов адрес/порт).

Обърнете внимание, че можете да получите тези конкретни съобщения за грешки при възникване на други проблеми с SQL Server; например, може да получите следните съобщения за грешка Ако отдалечения компютър, на който работи SQL Server се изключва, ако отдалечения компютър, на който работи SQL Server не слуша TCP/IP контакти, ако мрежовата връзка към компютъра, на който работи SQL Server е повредена, защото мрежовият кабел е изтеглен, или ако имате проблеми с DNS резолюция. По принцип всичко, което може да доведе до клиента за отворите TCP/IP гнездо на компютъра, на който работи SQL Server може да предизвика съобщенията за грешки. Обаче с стрес гнездо проблем, проблемът възниква периодично стрес се увеличава и попада. Компютърът може да отнеме час без грешки, тогава грешката възниква един или два пъти и на компютъра и след това за няколко часа без грешки. Също така когато имате този проблем, обща връзка към SQL Server работи незабавно, неуспешно напред, след което работи отново следващия момент. С други думи стрес гнездо проблеми обикновено възникват спорадично, но реални проблеми с мрежовата връзка със SQL Server обикновено възниква спорадично.

Две основни проблеми, свързани със стрес обикновено възникват, когато забраните обединяването, докато използвате SQL Server TCP/IP протокол: може да стартирате от анонимни портове на клиентския компютър, или е възможно да надвишите WinsockListenBacklog по подразбиране на компютъра, на който работи SQL Server.


За допълнителна информация относно анонимен портове щракнете върху следния номер на статия в базата знания на Microsoft:

319502 PRB: "WSAEADDRESSINUSE" съобщение за грешка при опит за свързване чрез анонимен порт след увеличите ограничението IMAP

Настройките MaxUserPort и TcpTimedWaitDelay

Имайте предвид, че MaxUserPort и TcpTimedWaitDelay настройки се прилагат само за клиентски компютър, който е бързо отваряне и затваряне на връзката към отдалечен компютър, на който работи SQL Server и не използва групиране на връзката. Например тези настройки са приложими в Internet Information Services (IIS) сървър, който обслужва голям брой входящи HTTP заявки и че отваряне и затваряне на връзката към отдалечен компютър, който работи SQL Server и който използва протокола TCP/IP с обединяване забранени. Ако обединяване е активирано, не трябва да промените настройките на MaxUserPort и TcpTimedWaitDelay .

Когато използвате протокола TCP/IP връзка към компютър, на който работи SQL Server, използваната мрежа SQL Server библиотека отваря TCP/IP гнездо на компютъра, на който работи SQL Server. Когато се отваря този контакт, мрежата библиотека на SQL Server не позволява опцията SO_REUSEADDR TCP/IP гнездо. За повече информация относно настройката на SO_REUSEADDR гнездо вижте темата "Setsockopt" в Microsoft Developer Network (MSDN).


Имайте предвид, че SQL Server мрежа библиотеката специално не позволява опцията SO_REUSEADDR TCP/IP гнездо от съображения за сигурност. Когато SO_REUSEADDR е активиран, злонамерен потребител да откраднат клиентски порт за SQL Server и използвате идентификационни данни, че клиентът да получите достъп до компютъра, на който работи SQL Server. По подразбиране защото мрежата библиотека на SQL Server не позволява опцията SO_REUSEADDR гнездо, всеки път, когато отворите и затворите сокет през мрежата библиотека на SQL Server от страна на клиента, гнездото влиза в TIME_WAIT състояние за четири минути. Ако бързо отваряне и затваряне на SQL Server връзки през TCP/IP с обединяване забранена, вие се бързо отваряне и затваряне TCP/IP контакти. С други думи всяка връзка с SQL Server е един TCP/IP гнездо. Ако бързо отваряне и затваряне 4000 гнезда по-малко от четири минути, ще достигне максимална настройката по подразбиране за анонимни клиентски портове и нови опити за контакт връзка не успеят до съществуващия набор TIME_WAIT контакти пъти.

От страната на клиента може да се наложи да увеличите MaxUserPort и TcpTimedWaitDelay настройки, които се обсъждат в Q319502, когато имате обединяване забранени. Настройките за тези стойности зависят от колко SQL Server връзката се отваря и затваря възникват от страна на клиента. Можете да прегледате колко клиентски портове са в състояние на TIME_WAIT чрез инструмента Netstat на клиентския компютър. Стартирайте инструмента Netstat с флаг -n както следва и броя на клиент контакти на SQL Server IP адрес в TIME_WAIT състояние. В този пример IP адреса на отдалечения компютър, на който работи SQL Server е 10.10.10.20 IP адреса на компютъра на клиента е например, 10.10.10.10 и три установени връзки и двете връзки са в състояние на TIME_WAIT:

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

Ако изпълнявате netstat -n и видите, че в близост до 4000 връзки към IP адреса на целевия компютър, на който работи SQL Server са в TIME_WAIT състояние, можете да както увеличаване MaxUserPort по подразбиране и намаляване TcpTimedWaitDelay настройката, така че да не се изпълняват от клиент анонимен портове. Например можете да зададете настройката на MaxUserPort към 20000 и зададете настройката на TcpTimedWaitDelay 30. Настройка на долната TcpTimedWaitDelay означава, че сокети чака в TIME_WAIT състояние по-малко време. Настройка на по-висока MaxUserPort означава, че можете да имате повече контакти в TIME_WAIT състояние.

Обърнете внимание, че ако настройката на MaxUserPort или TcpTimedWaitDelay , трябва да рестартирате Microsoft Windows за новата настройка да влязат в сила. MaxUserPort и TcpTimedWaitDelay настройки са за всеки клиентски компютър, който е пред компютър, на който работи SQL Server през TCP/IP контакти. Тези настройки няма ефект, ако те са на компютъра, който работи SQL Server, освен ако вие правите местни TCP/IP гнездо връзки на локалния компютър, на който работи SQL Server.

Забележка: Ако настроите MaxUserPort настройката, препоръчваме да резервират порт 1434 за използване от услугата на SQL Server Browser (sqlbrowser.exe). За повече информация как да направите това, щракнете върху следния номер на статия в базата знания на Microsoft:

Как да запазите диапазон от краткотрайното портове на компютър, работещ под Windows Server 2003 или Windows 2000 Server 812873

Променете настройката на WinsockListenBacklog

За допълнителна информация относно тази настройка в системния регистър специфична за SQL Server щракнете върху следния номер на статия в базата знания на Microsoft:

154628 INF: SQL регистрира 17832 с множество TCP\IP заявки
Когато мрежа библиотеката на SQL Server прослушва от TCP/IP контакти, библиотеката на SQL Server мрежа използва слушате Winsock API. Вторият параметър за слушане API е закъснение, което е разрешено за контакта. Този натрупаните представлява максималната дължина на опашката на чакащи връзки за слушателя. Когато дължината на опашката превишава тази максимална дължина, Библиотека на SQL Server мрежа веднага отхвърля повече TCP/IP гнездо опити за връзка. Освен това библиотеката на SQL Server мрежа изпраща пакета ACK + RESET.

SQL Server 2000 използва по подразбиране слуша натрупаните настройка на 5. Това означава, че компютърът, на който работи SQL Server преминава стойност 5 натрупаните параметър на слушате Winsock API, когато слушате API създава TCP/IP протокол за слушане теми на компютъра, на който работи SQL Server. Можете да настроите WinsockListenBacklog ключ, за да укажете различна стойност да бъде предадена за този параметър. От SQL Server 2005 г. библиотеката на мрежа преминава стойност SOMAXCONN като настройката на натрупаните слушате API. SOMAXCONN позволява на доставчика на Winsock да зададете максималната разумна стойност за тази настройка. Затова WinsockListenBacklog ключ на системния регистър е вече използват или в SQL Server 2005.

Чакащите настройка работи както следва: да предположим, че слуша произволна услуга за входящи TCP/IP гнездо заявки. Ако зададете настройката на натрупаните 5 и много гнездо заявки са непрекъснато поток, услугата може да не успеете да отговаря на входящите заявки веднага по-бързо. В този момент TCP/IP сокети опашки тези входящи заявки в опашката на чакащите и услугата по-късно може да изтегли заявки от тази опашка и обработи входящите гнездо връзка заявката. След опашката запълни, TCP/IP сокети незабавно отхвърля всички допълнителни гнездо заявки, които постъпват чрез изпращане на пакета ACK + НУЛИРАНЕ на клиента. Увеличаване на натрупаните опашката се увеличава размера на брой до гнездо връзка искания, че TCP/IP сокети опашки преди отхвърляне на заявки.

Имайте предвид, че WinsockListenBacklog е специфичен за SQL Server. SQL Server се опитва да чете тази настройка в системния регистър при първото стартиране на услугата на SQL Server. Ако настройката не съществува, се използва по подразбиране 5. Ако настройките на системния регистър, SQL Server чете настройка и използва предоставената според настройката закъснение при WinSock API слушате се нарича като TCP/IP гнездо слушане теми са вътре SQL Server.

За определяне дали се изпълняват в този проблем, можете да стартирате проследяване за наблюдение на мрежата на клиента или на компютър, на който работи SQL Server и потърсете гнездо връзка искания, които веднага се отхвърлят с ACK + НУЛИРАНЕ. Ако разгледате TCP/IP пакети в Network Monitor, виждате пакет, като например, когато този проблем се случва:

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)

Имайте предвид, че порта източник 0x599 или 1433 в десетичен. Това означава, че пакетът идва от типичен компютър, на който работи SQL Server и който се изпълнява по подразбиране порта на 1433. Също така, имайте предвид, че полето за потвърждение и възстановите връзката флагове са зададени. Ако сте запознати с филтриране проследяване Мрежов монитор, можете да филтрирате TCP флагове стойността от 0x14 шестнадесетичен да виждате само пакети ACK + НУЛИРАНЕ в проследяването на наблюдение на мрежата.

Обърнете внимание, че можете да видите подобни пакети ACK + RESET ако компютърът, на който работи SQL Server не работи изобщо, или ако компютърът, на който работи SQL Server не слуша TCP/IP протокол, да виждат пакети ACK + възстановяване не е окончателно потвърждение, че имате този проблем. Ако WinsockListenBacklog е прекалено ниска, някои опити получават връзка приема пакети и някои връзки получите незабавно пакети ACK + НУЛИРАНЕ еднакво.

Имайте предвид, че в много редки случаи може да се наложи да промените тази настройка, дори ако обединяване е активирано в компютри клиенти. Например, ако много компютри клиенти говорят на един компютър, на който работи SQL Server, голям брой едновременни входящи опити за връзка може да възникне в даден момент дори обединяване е активирано.

Забележка Ако настройката на WinsockListenBacklog , не трябва да рестартирате Windows за тази настройка, за да влязат в сила. Просто спрете и рестартирайте услугата на SQL Server за настройка, за да влязат в сила. Настройка на системния регистър WinsockListenBacklog е само на компютъра, на който работи SQL Server. Няма влияние на всеки клиентски компютър, който е комуникация с SQL Server.

Нуждаете ли се от още помощ?

Искате ли още опции?

Разгледайте ползите от абонамента, прегледайте курсовете за обучение, научете как да защитите устройството си и още.

Общностите ви помагат да задавате и отговаряте на въпроси, да давате обратна връзка и да получавате информация от експерти с богати знания.

Беше ли полезна тази информация?

Доколко сте доволни от качеството на езика?
Какво е повлияло на вашия потребителски опит?
Като натиснете „Подаване“, вашата обратна връзка ще се използва за подобряване на продуктите и услугите на Microsoft. Вашият ИТ администратор ще може да събира тези данни. Декларация за поверителност.

Благодарим ви за обратната връзка!

×