超时SQL Azure上过期;不能复制的内部SQL Server [已关闭]

前端之家收集整理的这篇文章主要介绍了超时SQL Azure上过期;不能复制的内部SQL Server [已关闭]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我们的业务线上,我们主持一个基于REST的API,由 Windows Azure和sql Azure作为数据库存储托管.

网络角色(Windows 2008R2,IIS 7.5,WCF,大型实例)和sql Azure都在北欧地区托管.

问题是,当我们进行深入的sql工作时,我们经常会得到一个“超时过期”.在完成操作或服务器没有响应之前经过的超时时间.

我在这里遇到的麻烦是,无论我们做什么,我们都不能在我们的内部部署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,Boolean returnStream,Boolean async)</Line>
        <Line>at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result)</Line>
        <Line>at System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,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[]&amp; outputs)</Line>
        <Line>at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)</Line>
        <Line>at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)</Line>
        <Line>at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; 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>

解决方法

如果您需要执行sql密集型工作(例如,规范OLTP数据库中的大量INSERT语句),则需要在代码中具有故障切换逻辑.

本地sql服务器不会受到此影响,因此在切换到sql Azure之前要考虑到这一点.

这两篇文章激励了我(特别感谢Joachim Isaksson的指导):

http://blogs.msdn.com/b/sqlazure/archive/2010/05/11/10011247.aspx

http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/7a50985d-92c2-472f-9464-a6591efec4b3/

为了总结结果,我提供了两个结果,这些结果现在在结果中是相同的(在某些未添加的记录之前,对于原始问题的缺失故障转移逻辑,超时已过):

内部部署sql Server:427秒内的179.285条记录

sql Azure w.故障转移逻辑:179.285记录在2.247秒 – 一个百日咳5.2倍慢!

我希望这可以帮助别人努力与sql Azure.积极注意;你学习(艰难的方式)你对你本地的内部应用程序感到幸运和特权:-)

注意:我仍然想解释这可能如何发生..似乎很容易怪责延迟,不?

猜你在找的MsSQL相关文章