在我們的業務線中,我們託管的是基於REST的API,由Windows Azure和SQL Azure託管爲數據庫存儲。超時在SQL Azure上超時;無法在本地複製SQL Server
Web角色(Windows 2008R2,IIS 7.5,WCF,大型實例)和SQL Azure都在北歐地區託管。
問題是,當我們進行密集的SQL工作時,我們經常會得到一個「Timeout expired。操作完成之前超時時間已到或服務器沒有響應。。
這裏有什麼麻煩是,不管我們做什麼,我們都不能在我們的內部部署SQL服務器(SQL Server 2008R2)上激起這種情況。
任何幫助澄清這個謎題,因爲看起來Web角色實例並不直接與SQL Azure實例交談,儘管它們都位於北歐。
更詳細的異常:
<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>
兩個數據庫中的相同索引?是的,由於延遲問題,Azure SQL對於簡單查詢的速度可能較慢,但對於相同的數據庫模式,8-15倍聽起來非常陡峭。 –
是,SSMS 2012爲SQL Azure生成腳本的「相同」模式。 「完全相同」,因爲SQL Server 2008R2生成的腳本不是1-1。我可以 - 在某種程度上 - 理解延遲,但是如果Web和SQL在同一個區域中,這不應該被「消除」嗎? –
你說得對; 8-15被誇大了......它慢了4-8倍(不同的場景;因爲這只是「慢了4-5倍),但是缺少記錄會超時。 –