【问题标题】:SQL Azure TimeoutSQL Azure 超时
【发布时间】:2012-01-26 16:44:42
【问题描述】:

我们在尝试从托管 Web 角色 ASP.NET / Umbraco 应用程序连接时遇到 SQL Azure 超时问题)。这个问题是间歇性的。例外是:

在 /microsoft-crm/microsoft-crm-2011.aspx(引用者:xxxxxxxxxxx): umbraco.DataLayer.SqlHelperException:Umbraco 异常(DataLayer): ExecuteReader 中的 SQL 帮助程序异常 ---> System.Data.SqlClient.SqlException:超时已过期。超时 在操作完成之前经过的时间段或服务器处于 没有响应。在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj,UInt32 错误)在 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() 在 System.Data.SqlClient.TdsParserStateObject.ReadByte() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,DbAsyncResult 结果)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为)在 Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(字符串 连接字符串、命令类型命令类型、字符串命令文本、 SqlParameter[] commandParameters) 在 umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader(字符串 commandText,SqlParameter[] 参数)在 umbraco.DataLayer.SqlHelper1.ExecuteReader(String commandText, IParameter[] parameters) --- End of inner exception stack trace --- at umbraco.DataLayer.SqlHelper1.ExecuteReader(String commandText, IParameter[] parameters) at umbraco.macro..ctor(Int32 id) at umbraco.macro.ReturnFromAlias(String alias) at umbraco.presentation.templateControls.Macro.CreateChildControls()
在 System.Web.UI.Control.EnsureChildControls() 在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Control.InitRecursive(控件命名容器)在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint)

我们到 SQL Azure 的连接字符串是:

Server=tcp:xxxxxxx.database.windows.net,1433;Database=DatabaseName;User ID=UserName@Servername;Password=Password;Trusted_Connection=False;Encrypt=True;TrustServerCertificate=True

【问题讨论】:

  • 在 umbraco.DataLayer.SqlHelper1.ExecuteReader(String commandText, IParameter[] parameters): 你能调试并得到实际的 commandText,然后尝试在 SSMS 中执行它,看看它是否在那里工作?跨度>

标签: asp.net sql azure umbraco azure-sql-database


【解决方案1】:

调试 SQL Server 超时的常见问题适用,即使您在云中。

我发现的主要区别在于 SQL Azure 通常比专用的本地服务器慢,无论是在查询速度还是在将数据传输回 Web 应用程序的速度方面。

  • 记住索引:你会需要它们!
  • 打开跟踪并尝试获取正在执行的实际查询。评估查询计划(参见http://www.sql-server-performance.com/2006/query-execution-plan-analysis/),看看表结构是否有什么明显可以做的事情。
  • 确保您的 SQL Azure 实例与您的 Web 角色位于同一数据中心。在数据中心之间传输大量数据很慢(而且很昂贵!)。
  • 尽量避免从数据库中检索大量数据而仅在 Web 应用程序中过滤的模式。相反,请确保数据库完成“繁重的工作”。

您还可能会发现,如果您正在运行 很多 个查询,您的 SQL Azure 连接可能会受到限制。对此的引用在这里:http://msdn.microsoft.com/en-us/library/windowsazure/ff394106.aspx#throttling - 但是,因为它给出了一个明显不同的错误代码,我怀疑这不是这里的情况。

【讨论】:

    【解决方案2】:

    我们在 SQL Azure 上遇到过类似的超时,结果发现是会话状态数据库导致了超时。

    一旦我们切换到 AppFabric 缓存进行会话状态管理,我们就不再遇到任何超时。

    更多信息在这里: http://our.umbraco.org/forum/core/general/27179-SQL-Azure-connectivity-issues

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      相关资源
      最近更新 更多