W naszej branży hostujemy API oparte na REST, które jest hostowane przez Windows Azure i SQL Azure jako pamięć bazy danych.Limit czasu wygasł na SQL Azure; nie można odtworzyć w siedzibie SQL Server
Zarówno rola internetowa (Windows 2008R2, IIS 7.5, WCF, duża instancja), jak i SQL Azure są hostowane w regionie Europy Północnej.
Problem polega na tym, że kiedy wykonujemy intensywną pracę SQL, często dostajemy "Upłynął limit czasu, który upłynął przed zakończeniem operacji lub serwer nie odpowiada.".
To, co mnie tu niepokoi, to że bez względu na to, co robimy, nie możemy tego sprowokować na naszych lokalnych serwerach SQL (SQL Server 2008R2).
Każda pomoc w wyjaśnieniu tej tajemnicy jest doceniana, ponieważ wydaje się, że instancja roli sieciowej nie jest bezpośrednio rozmowna z instancją SQL Azure, chociaż oba znajdują się w Europie Północnej.
Bardziej szczegółowy wyjątek:
<SqlException>
<Message>Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.</Message>
<StackTrace>
<Line>at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)</Line>
<Line>at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()</Line>
<Line>at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)</Line>
<Line>at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()</Line>
<Line>at System.Data.SqlClient.SqlDataReader.get_MetaData()</Line>
<Line>at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)</Line>
<Line>at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)</Line>
<Line>at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)</Line>
<Line>at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)</Line>
<Line>at System.Data.SqlClient.SqlCommand.ExecuteScalar()</Line>
<Line>at SyncInvokeAddCollaboratorFieldInstance(Object , Object[] , Object[])</Line>
<Line>at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)</Line>
<Line>at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)</Line>
<Line>at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)</Line>
<Line>at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)</Line>
<Line>at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</Line>
</StackTrace>
<UserDefinedInformation>
<HelpLink.ProdName><![CDATA[Microsoft SQL Server]]></HelpLink.ProdName>
<HelpLink.ProdVer><![CDATA[11.00.2065]]></HelpLink.ProdVer>
<HelpLink.EvtSrc><![CDATA[MSSQLServer]]></HelpLink.EvtSrc>
<HelpLink.EvtID><![CDATA[-2]]></HelpLink.EvtID>
<HelpLink.BaseHelpUrl><![CDATA[http://go.microsoft.com/fwlink]]></HelpLink.BaseHelpUrl>
<HelpLink.LinkId><![CDATA[20476]]></HelpLink.LinkId>
</UserDefinedInformation>
</SqlException>
Identyczne indeksy w dwóch bazach danych? Tak, usługa Azure SQL jest najprawdopodobniej wolniejsza w przypadku prostych zapytań z powodu opóźnień, ale 8-15 razy brzmi dość stromo dla tego samego schematu bazy danych. –
Tak, "identyczne" schematy, w których SSMS 2012 generuje skrypt dla SQL Azure. "Identyczny", ponieważ wygenerowany skrypt nie jest równy 1-1 z SQL Server 2008R2. Mogę - do pewnego momentu - zrozumieć opóźnienie, ale czy nie powinno to zostać "wyeliminowane", gdy zarówno Internet, jak i SQL są w tym samym regionie? –
I masz rację; 8-15 było przesadzone ... jest to więcej 4-8 razy wolniej (różne scenariusze, bo to jest "tylko" 4-5 razy wolniejsze), ale z brakującymi rekordami do przekroczenia limitu czasu. –