Истекло время ожидания при подключении к SQL Server
Применяется к: SQL Server
Примечание.
Прежде чем приступить к устранению неполадок, проверьте предварительные требования и просмотрите контрольный список.
Ошибка времени ожидания означает, что определенная операция занимает больше времени, чем требуется. Клиентское приложение останавливает операцию (вместо ожидания на неопределенный срок), которая может блокировать другие операции и приостановить приложение. В этой статье приводятся разрешения ошибок "время ожидания команды" и "время ожидания подключения" при подключении к SQL Server.
Проверка ошибок истечения срока действия
При возникновении проблем с истечением срока действия вы получите одно или несколько следующих сообщений об ошибках:
-
Время ожидания истекло. Время ожидания истекло до завершения операции, либо сервер не отвечает.
-
System.Data.SqlClient.SqlException (0x80131904): истек срок ожидания подключения. Истекло время ожидания при попытке использования подтверждения предварительного подтверждения. Это может быть вызвано сбоем подтверждения перед входом или невозможностью ответа сервера вовремя. Время, затраченное на попытки подключиться к этому серверу, составило: [Pre-Login] initialization=23; handshake=14979;
System.ComponentModel.Win32Exception (0x80004005). Время операции ожидания истекло. -
System.Data.SqlClient.SqlException (0x80131904): истекло время ожидания. Время ожидания истекло до завершения операции, либо сервер не отвечает. System.ComponentModel.Win32Exception (0x80004005). Время операции ожидания истекло.
-
Время ожидания для подключения истекло. Истекло время ожидания при попытке использования подтверждения предварительного подтверждения. Это может быть вызвано сбоем подтверждения перед входом или невозможностью ответа сервера вовремя.
Длительность, затраченная при попытке подключения к этому серверу, была инициализация [Предварительная вход]=21036; рукопожатие=0; (Microsoft SQL Server, ошибка: -2). -
System.InvalidOperationException: истекло время ожидания. Время ожидания истекло до получения подключения из пула.
Если подключения закрыты неправильно, могут возникать ошибки. Эти ошибки возникают из-за того, что все подключения в пуле используются, и достигается максимальный размер пула. Эти ошибки можно избежать, если вы выполните действия, описанные в статье об исчерпании пула подключений.
Примечание.
Вторая и третья ошибка возникают при установке платформа .NET Framework 4.5 или более поздней версии.
Определение типа ошибок истечения срока действия
С точки зрения подключения возникают следующие проблемы со временем ожидания:
- Время ожидания подключения (по умолчанию — 15 секунд)
- Время ожидания запроса или команды (по умолчанию — 30 секунд)
Примечание.
Значения по умолчанию можно задать с помощью кода, подключения строки или других методов.
Перед устранением неполадок просмотрите полный стек вызовов сообщений об ошибках, чтобы определить тип ошибки.
См. следующий пример стека вызовов времени ожидания подключения:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable) at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open()
SqlConnection.Open
указывает, что клиент пытается открыть подключение и поэтому не связан с запросом.См. следующий пример стека вызовов стека запроса или времени ожидания команды:
System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) at System.Data.SqlClient.SqlCommand.ExecuteScalar()
Класс
SqlCommand
используется для работы с запросом, а не подключением. МетодExecuteScalar
используется для выполнения запроса. Вы также можете увидеть другие элементы, такие какExecuteReader
илиExecuteNonQuery
.
Устранение ошибок с истекшим сроком ожидания
Если возникает ошибка времени ожидания запроса или команды, см . статью "Устранение ошибок времени ожидания запроса".
Если возникла ошибка времени ожидания подключения, выполните следующие действия.
Увеличьте параметр времени ожидания подключения.
Если вы используете приложение для подключения к SQL Server, увеличьте соответствующие значения параметров времени ожидания подключения и проверьте, успешно ли подключение в конечном итоге выполнено. Например, если вы используете
System.Data.SqlClient
, задайте для свойства SqlConnection.ConnectionTimeout значение 30 или более высокое значение.Примечание.
Если вы используете другие поставщики, проверьте домашняя страница для программирования клиента SQL.
Если вы используете SQL Server Management Studio (SSMS), перейдите на вкладку "Свойства подключения" в диалоговом окне "Подключение к серверу " и задайте для параметра времени ожидания подключения более высокое значение.
Если подключение в конечном итоге успешно выполнено, это проблема с сетью. Чтобы устранить проблему, необходимо работать с администратором сети. После разрешения можно вернуться к параметрам по умолчанию в приложении.
Примечание.
Увеличение времени ожидания подключения в приложении является возможным методом, но это не долгосрочное разрешение. Это связано с тем, что подключение происходит быстро (обычно в течение нескольких миллисекундах) при попытке подключиться к источнику данных.
Типичные причины и разрешения ошибки
В следующей таблице перечислены типичные причины и разрешения ошибок истечения срока действия. Дополнительные советы и предложения см. в разделе "Устранение неполадок: истекло время ожидания".
Типичные причины | Разрешения |
---|---|
Имя сервера было введено неправильно. | Повторите попытку с правильным именем сервера. |
Служба SQL Server на сервере не запущена. | Запустите экземпляр ядро СУБД SQL Server. |
Порт TCP/IP для экземпляра ядро СУБД блокируется брандмауэром. | Настройте брандмауэр, чтобы разрешить доступ к ядро СУБД. |
Ядро СУБД не прослушивается через порт 1433. Это связано с тем, что порт изменен или не является экземпляром по умолчанию, а служба браузера SQL Server не запущена. | Запустите службу браузера SQL Server или укажите номер порта TCP/IP для подключения к команде Sqlcmd -S <ip_addres>,<port> . В журнале ошибок найдите номер порта, на который прослушивается SQL Server. |
Служба браузера SQL Server запущена, но порт UDP 1434 блокируется брандмауэром. | Настройте брандмауэр, чтобы разрешить доступ к порту UPD 1434 на сервере или указать номер порта TCP/IP для подключения. |
Клиент и сервер не настроены для использования одного сетевого протокола. | Убедитесь, что сервер и клиентские компьютеры имеют по крайней мере один протокол с включенным протоколом, используя диспетчер конфигурации SQL Server. Например, если клиент подключается с помощью сокетов TCP/IP, но SQL Server прослушивает только именованные каналы, подключение не может быть установлено. |
Сеть не может разрешить имя сервера ip-адресу. Это можно проверить с помощью программ ping или telnet. | Исправьте проблему разрешения имен компьютера в сети или подключитесь к серверу с помощью IP-адреса. Это не проблема с SQL Server. Чтобы получить помощь, ознакомьтесь с документацией по Windows или обратитесь к администратору сети. Чтобы проверить подключение, используйте следующую команду:telnet <ServerName> [<Port>] telnet <IP_Address> <Port> Если используется IP-адрес, но имя сервера не работает, это проблема с разрешением имен. |
Сеть не может подключиться с помощью IP-адреса. Это можно проверить с помощью программы ping, telnet или tracert . | Исправлена проблема TCP/IP в сети. Это не проблема с SQL Server. Чтобы получить помощь, ознакомьтесь с документацией по Windows или обратитесь к администратору сети. Дополнительные сведения об устранении неполадок с сетью см. в разделе 0300 Периодические или периодические проблемы с сетью. |