У меня есть приложение ASP.NET (Sitecore), и журналы показывают прерывистые ошибки соединения SQL в рабочей среде нашего клиента. Исключение состоит в следующем:Ошибка промежуточного соединения SQL
Exception: System.Data.SqlClient.SqlException
Message: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Source: .Net SqlClient Data Provider
at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling)
at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Sitecore.Data.DataProviders.Sql.DataProviderCommand..ctor(IDbCommand command, DataProviderTransaction transaction, Boolean openConnection)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<>c__DisplayClass4.<CreateCommand>b__3()
at Sitecore.Data.DataProviders.NullRetryer.Execute[T](Func`1 action, Action recover)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<>c__DisplayClass12.<CreateReader>b__10()
at Sitecore.Data.DataProviders.NullRetryer.Execute[T](Func`1 action, Action recover)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateReader(String sql, Object[] parameters)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<CreateObjectReader>d__6`1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at Sitecore.Eventing.EventQueue.ProcessEvents(Action`2 handler)
at Sitecore.Eventing.EventProvider.RaiseQueuedEvents()
Nested Exception
Exception: System.ComponentModel.Win32Exception
Message: The network path was not found
6420 16:53:53 ERROR Exception processing remote events from database: web
Exception: System.Data.SqlClient.SqlException
Message: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
Source: .Net SqlClient Data Provider
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Sitecore.Data.DataProviders.Sql.DataProviderCommand..ctor(IDbCommand command, DataProviderTransaction transaction, Boolean openConnection)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<>c__DisplayClass4.<CreateCommand>b__3()
at Sitecore.Data.DataProviders.NullRetryer.Execute[T](Func`1 action, Action recover)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<>c__DisplayClass12.<CreateReader>b__10()
at Sitecore.Data.DataProviders.NullRetryer.Execute[T](Func`1 action, Action recover)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.CreateReader(String sql, Object[] parameters)
at Sitecore.Data.DataProviders.Sql.SqlDataApi.<CreateObjectReader>d__6`1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at Sitecore.Eventing.EventQueue.ProcessEvents(Action`2 handler)
at Sitecore.Eventing.EventProvider.RaiseQueuedEvents()
Nested Exception
Exception: System.ComponentModel.Win32Exception
Message: The network path was not found
Эта ошибка типична, если Вы предоставили неверную строку соединения, где сервер, указанный не существует или не доступен в сети. Однако сайт функционирует нормально в 99% случаев.
В этом примере ошибка исходит от RaiseQueuedEvents
запланированной задачи Sitecore, но исключение также воскресил из различных других местах, в том числе при попадании в URL в месте, в результате HTTP 500.
Интересная вещь заключается в том, что они входят в волны, т. е. может быть до 100 из этих исключений в течение пары секунд.
Наша команда разработчиков инфраструктуры, которая управляет серверами, довольно непреклонна в том, что это не проблема сети, и что-то не так с кодом приложения, и сообщили, что в то время, когда эти исключения, похоже, :
(Все это яСНЫЕ СПАЙКИ по сравнению с обычной производительности) - на 10:10:14 - число, если пользовательских соединений увеличено с 60 до 90 - на 10:10:14 - количество « пакетные запросы/с "увеличились с 60 до 650 - в 10:10:32 -" дисковое avg. ЧИТАЙТЕ время»увеличились с 1мса до 8.4ms - в 10:10:32 - использование сетей подскочило с 0,3% до 18%
Там не были сеть капли зарегистрированной монитором SQL, был никакого влияния на использование центрального процессора.
Я не являюсь экспертом в области сетевой или SQL-производительности, но для меня эти статистические данные не кажутся необоснованными или могут послужить причиной последующих попыток подключения получить исключение «сетевой путь не найден»; если сервер был занят, я ожидаю получить исключение тайм-аута?
Я связался со службой поддержки Sitecore, которые быстро предложенным это сеть вопрос:
На основании этих исключений не кажется, что они Sitecore связаны между собой. В сообщениях четко указано, что у вас есть какая-то сетевая ошибка, поэтому будет уместен для дальнейшего изучения вместе с вашей командой Infrastructure. Я просмотрел подобные проблемы в нашей базе данных и может выделить следующие области. - Удаленное подключение было принудительно закрыто/отключено - Сервер был в автономном режиме - Что-то связанное с неправильным контекстом безопасности. Брандмауэр и антивирусы могут повлиять на это.
В настоящее время мы находимся в ссоре; мое ощущение, что сообщение об ошибке предлагает , должно быть быть сетевой проблемой, но, по мнению их команды, сайт сломан каким-то образом.
Как я могу диагностировать, в чем проблема? Может ли быть проблема с кодом/sitecore или это проблема с сетью?
Обновление: Сеть детали
Сервер базы данных размещается в другой сети и подключают к сети через VLAN, я считаю. Серверы сбалансированы по нагрузке, что * Я думаю, что * может быть сделано с использованием брандмауэра, а не для правильного балансировщика нагрузки.
UPDATE 2
Проблема заключалась в том, что SQL была настроена так, чтобы как TCP и именованные каналы. Иногда он пытается подключиться к последнему, который не использует стандартный SQL-порт. Решение заключалось в том, чтобы префикс источника данных/сервера в строке соединения с Data Source=tcp:xxx.xxx.xx.xxx
, чтобы всегда обеспечивать его подключение через TCP
Может быть автоклином в ваших свойствах db. – ASura
У тебя есть мои надежды! Но для этого свойства не установлено значение false –
Что бы я сделал, так это то, что служба ping постоянно открывала и закрывала соединение через VLAN. Я подозреваю, что LB/WAF отключает соединение. Также вы можете проверить, удалено ли максимальное ограничение соединения? Раньше, когда мы осуществляли транзакционную репликацию на разных континентах через VLAN, нам приходилось отправлять начальный запрос на соединение, прежде чем мы переместили данные. – ASura