2011-12-23 19 views
2

嘗試從Hosted Web角色ASP.NET/Umbraco應用程序進行連接時,我們正在獲取SQL Azure超時問題。這個問題是間歇性的。唯一的例外是: umbraco.DataLayer.SqlHelperException:SQL Azure Timeout

在/microsoft-crm/microsoft-crm-2011.aspx(:XXXXXXXXXXX推薦人)一把umbraco異常(數據層):在的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.ReadByte() System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()在 系統。 Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, 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,布爾returnStream,字符串 方法,DbAsyncResult結果)在 System.Dat a.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,布爾returnStream,字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行爲,字符串方法)在 System.Data.SqlClient.SqlCommand .ExecuteReader(的CommandBehavior 行爲)在 Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(字符串 的connectionString,的CommandType命令類型,字符串的CommandText, 的SqlParameter [] commandParameters)在 umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader(字符串 commandText,SqlParameter []參數)在 umbraco.DataLayer.SqlHelper 1.ExecuteReader(String commandText, IParameter[] parameters) --- End of inner exception stack trace --- at umbraco.DataLayer.SqlHelper 1.ExecuteReader(字符串的CommandText,IParameter []參數)在umbraco.macro..ctor(的Int32 ID)在umbraco.macro.ReturnFromAlias(字符串別名)在 umbraco.presentation.templateControls.Macro.CreateChildControls()
System.Web.UI.Control.EnsureChildControls()at System.Web.UI.Control.InitRecursive(Control namingContainer)at System.Web.UI.Control.InitRecursive(Control namingContainer)at System.Web.UI。在控制命名容器 System.Web.UI.Control.InitRecursive(Control namingContainer) System.Web.UI.Control.InitRecursive(Control namingContainer)at System.Web.UI.Control.InitRecursive(Control namingContainer)在 System.Web.UI.Control。InitRecursive(控制namingContainer)在 System.Web.UI.Control.InitRecursive(控制namingContainer)在 System.Web.UI.Page.ProcessRequestMain(布爾 includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)

我們的連接字符串SQL Azure是:

服務器= TCP:xxxxxxx.database.windows.net,1433;數據庫=數據庫名;用戶 ID =用戶名@服務器名;密碼=密碼; Trusted_Connection = FALSE;加密= TRUE; TrustServerCertificate =真

+1

在umbraco.DataLayer.SqlHelper1.ExecuteReader(字符串的CommandText,IParameter []參數):你可以調試,並得到實際的CommandText,然後嘗試在SSMS執行它,看它是否在那裏工作? – astaykov 2011-12-23 09:57:39

回答

3

即使您在雲中,調試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 - 然而,因爲這給出了截然不同的錯誤代碼,我懷疑這不是這裏的情況。