좋아요, 내 앱을 클라우드로 이동하려는 시도에서 로컬 SQL 데이터베이스를 Azure SQL로 이동했습니다. 문제는 새 Azure SQL 데이터베이스에 대한 연결이 'flakey'라는 것입니다. 다시 집에 가져올 것입니다.Azure SQL 연결 시간이 초과되었습니다.
작업은 데이터베이스에서 총 약 481K 레코드를 루프하고 작성하는 것입니다.
연결 문자열은 때마다 실행되는 SQL 쿼리가 복잡하지
"Server=tcp:xxx,1433;Initial Catalog=xx;Persist Security Info=False;User ID=xx;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;ConnectRetryCount=255;"
입니다. 3 개의 값을 3 개의 열에 삽입하기 만하면됩니다. (일부 내부 작업을 보호하기 위해 열과 값이 변경됨)
Insert Into TheTable (C1, C2, C3) VALUES ('V1', 'V2', 'V3')
하지만 무작위로이 점을 던집니다.
System.ComponentModel.Win32Exception (0x80004005) : 대기 작업 시간 초과 실행 시간 제한 만료. 작업이 완료되기 전에 시간 초과 기간이 경과되었거나 서버가 응답하지 않습니다. System.Data.SqlClient.SqlConnection.OnError (SqlException 예외, 부울 breakConnection, 작업 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource
완료, String methodName, 부울 sendToPipe, Int32 시간 초과, 부울 & usedCache, 부울 asyncWrite, 부울 inRetry) at System.Data.SqlClient.SqlCommand .ExecuteNonQuery() XX에서 D에 \ PATHOFTHEFILE :
1) I를 열어 연결을 I 레코드를 만들 때마다 폐쇄하고, 다음 단계에서 그것을 폐쇄있어 그 라인 (420)
참고.
2) 저 외에는 데이터베이스를 공격하는 사람이 없습니다.
3) 데이터베이스 서비스가 S1로 설정됩니다.
4) 예 - 프로그램이 420 행에 충돌한다는 아이러니하게 느껴집니다. 코드를 마약 검사하는 방법을 찾으려고합니다.
질문
1) 연결 문자열에 문제가 있습니까? 설명서에서는 Azure SQL 데이터베이스에 연결할 때 30 초의 시간 제한을 사용해야한다고 말합니다. 솔직히 코드가 0으로 설정된 타임 아웃을했을 때 코드가 더 잘 돌아갔다. (최소한 길게 살았다)
2) 처음에는 단일 연결을 사용하여 전체 481K INSERT 문을 통해 루프를 처리했다. 그게 나쁜 디자인인가요? Azure SQL 안정성은 얼마나 오래 지속될 것입니까?
3) Azure SQL에서 견고한 앱을 제작할 수있는 능력에 대해 따뜻한 느낌을주지 않습니다. 누군가가 로컬 SQL과 Azure SQL을 구축하는 것의 차이점에 대해 좋은 참고 자료를 제공 할 수 있습니까? 나는 내가 찾을 수있는 모든 것을 다 통과 했으므로 그곳에는 그다지 많이 보이지 않았다.
4) 나는 Azure SQL에 MMC를 통해 연결할 수 있다는 사실을 좋아한다. 그러나 MMC에서 더 이상 얻을 수없는 모든 종류의 모니터링 정보가 (일반적으로 말하면) 있습니다.사람은 무서운 푸른 포털
가 UPDATE 번호가 충전
public static void RunSQL(string SQLString)
{
int a = 0;
SqlCommand Command = new SqlCommand(SQLString, TheConnection);
try
{
a = Command.ExecuteNonQuery();
}
catch (Exception ex)
{
Notifications.EventLogging.ProcessEvent(SQLString + " go boom " + ex.InnerException + ex.Message + ex.StackTrace);
Notifications.EventLogging.ProcessEvent("Time Of Death" + DateTime.Now);
Console.ReadKey();
}
SqlConnections 및 SqlCommands를 사용하여 데이터베이스에 연결하고 있습니까? 그렇다면 귀하의 문제가 정확히 무엇인지 알고 있습니다. –
유죄로 청구 됨 - 위의 실제 코드 참조 # 1 – TRH