私は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
スケジュールされたタスクから来ているが、例外もHTTP 500
興味深いことで、その結果、サイト内のURLを打つときなど、様々な他の場所から発生します彼らが波に乗っているということです。すなわち、数百秒以内にこれらの例外が100個まで存在する可能性があります。
サーバーを管理するお客様のインフラストラクチャチームは、ネットワーク上の問題ではなく、アプリケーションコードに問題があり、これらの例外が発生したと思われる時点でDBトラフィックが増加していると報告しています:
(これらのすべては、通常の性能に比べCLEAR SPIKESである) - 10時10分14秒で - - 「の数のユーザ接続は60から 90に増加した場合に数 - 10時10分14秒でバッチリクエストは約60から650に増加しました。 - 10:10:32 - "ディスク平均。 10時10分32秒で - - 8.4ms には1msから増加した時間を「READネットワーク使用率がSQLモニタによって登録されたネットワーク滴ありませんでした
18%に0.3%から急上昇、 NOインパクトのありましたサーバーのCPU使用率。
私はネットワーキングやSQLパフォーマンスの専門家ではありませんが、これらの統計情報は不合理ではないようです。または、後でネットワーク接続が見つかりませんでした。サーバーがビジーだった場合は、タイムアウト例外が発生することが予想されます。
私は迅速に、それはネットワークの問題で示唆されているサイトコアのサポート連絡しました:これらの例外に基づき
彼らがサイトコアに関連しているようではありませんが。 メッセージには何らかの種類のネットワークエラーがあることが明確に記載されているため、 インフラストラクチャチームと共にさらに調査することには が適しています。私はデータベースで同様の問題をレビューし、 は次の領域を強調表示できます。 - リモート接続が強制的に閉じられました/無効にされました - サーバーがオフラインでした - 間違ったセキュリティコンテキストに関連しました。ファイアウォールやアンチウィルスが影響を与える可能性があります。
現在のところ、私たちはログアウトしています。私の気持ちは、エラーメッセージがであることが示唆されていることです。ネットワークに問題はありませんが、チームは何らかの方法でサイトが壊れていると考えています。
どのように問題を診断できますか?コード/サイトコードに問題があるのでしょうか、これはネットワーキングの問題ですか?
更新:ネットワークは、データベースサーバが異なるネットワーク上でホストされていると私は信じているVLANを経由してネットワーク接続されている
を詳述。サーバは負荷分散されていますが、私は *が適切なロードバランサではなくファイアウォールを使用して実行される可能性があると思います。
UPDATE 2
問題はSQLがTCPと名前付きパイプの両方を許可するように設定されたということでした。標準のSQLポートを使用しない後者と接続しようとすることもあります。解決策は、接続文字列のデータソース/サーバの接頭辞をData Source=tcp:xxx.xxx.xx.xxx
に設定して、常にTCP経由で接続することです。
dbプロパティのautocloseになる可能性があります。 – ASura
あなたは私の希望をそこに持っています!しかし、そのプロパティはfalseに設定されていません –
私は、pingサービスを常に開いてVLAN経由で接続を閉じることを考えています。LB/WAFが接続を切断していると思われます。また、最大接続制限がヒットしているかどうかを確認できますか?従来、VLANを介して大陸間でトランザクションレプリケーションを行った場合、データをプッシュする前に最初の接続要求を送信する必要がありました。 – ASura