2011-12-23 3 views
2

У нас возникают проблемы с тайм-аутом SQL Azure при попытке подключения из веб-роли Hosted ASP.NET/Umbraco). Проблема прерывистая. Исключение составляют:SQL Azure Timeout

В /microsoft-crm/microsoft-crm-2011.aspx (Приглашен: XXXXXXXXXXX): umbraco.DataLayer.SqlHelperException: Umbraco Exception (DataLayer): SQL помощник исключение ExecuteReader - -> 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() в системе. 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, String resetOptionsString) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, runBehavior runBehavior, булева returnStream, булева асинхронной) при System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, runBehavior runBehavior, Boolean returnStream, String метод, результат DbAsyncResult) в System.Dat a.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, String метод) при System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) в System.Data.SqlClient.SqlCommand .ExecuteReader (CommandBehavior поведение) при Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader (String ConnectionString, CommandType CommandType, Строка CommandText, SqlParameter [] commandParameters) при umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader (String commandText, параметры SqlParameter []) на umbraco.DataLayer.SqlHelper 1.ExecuteReader(String commandText, IParameter[] parameters) --- End of inner exception stack trace --- at umbraco.DataLayer.SqlHelper 1.ExecuteReader (String CommandText, IParameter [] Параметры) при umbraco.macro..ctor (Int32 идентификатор) в umbraco.macro.ReturnFromAlias ​​(String псевдоним) на umbraco.presentation.templateControls.Macro.CreateChildControls()
в System.Web.UI.Control.EnsureChildControls() на System.Web.UI.Control.InitRecursive (Control namingContainer) на System.Web.UI.Control.InitRecursive (Control namingContainer) на System.Web.UI. Control.InitRecursive (Control namingContainer) на System.Web.UI.Control.InitRecursive (Control namingContainer) на System.Web.UI.Control.InitRecursive (Control namingContainer) на System.Web.UI.Control.InitRecursive (управление namingContainer) в System.Web.UI.Control.InitRecursive (Control NamingContainer) на System.Web.UI.Control.InitRecursive (Control NamingContainer) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Наша строка соединения с SQL Azure является:

Server = ТСР: xxxxxxx.database.windows.net, 1433; Database = DatabaseName; Пользователь ID = UserName @ Servername; Password = Пароль; Trusted_Connection = False; Encrypt = True; TrustServerCertificate = True

+1

в umbraco.DataLayer.SqlHelper1.ExecuteReader (String CommandText, IParameter [] параметров): вы можете отлаживать и получить фактическую CommandText, а затем попытаться выполнить его в SSMS, чтобы увидеть, если он работает там? – astaykov

ответ

3

Обычные проблемы с отладкой тайм-аута SQL Server применяются, даже если вы находитесь в облаке.

Основное отличие, которое я обнаружил, заключается в том, что SQL Azure, как правило, медленнее, чем выделенный сервер на месте, как с точки зрения скорости запросов, так и с точки зрения скорости передачи данных обратно в веб-приложение.

  • Помните, что индексы вам понадобятся!
  • Включите трассировку и попытайтесь получить фактический запрос, который выполняется. Оцените план запроса (см. http://www.sql-server-performance.com/2006/query-execution-plan-analysis/) и посмотрите, есть ли что-то очевидное, что можно сделать с помощью структуры таблицы.
  • Убедитесь, что ваш экземпляр SQL Azure находится в том же центре обработки данных, что и ваши веб-роли. Передача большого количества данных медленнее (и дорого!) Между центрами обработки данных.
  • Старайтесь избегать шаблонов, в которых много данных извлекается из базы данных, только для фильтрации в веб-приложении. Скорее, убедитесь, что база данных выполняет «тяжелый подъем».

Вы также можете обнаружить, что если вы работаете много запросов, подключение к SQL Azure может стать задушил. Ссылка на это находится здесь: http://msdn.microsoft.com/en-us/library/windowsazure/ff394106.aspx#throttling - однако, поскольку это дает совершенно другой код ошибки, я подозреваю, что здесь не такая ситуация.

0

Мы испытывали симулятивные таймауты на SQL Azure, и оказалось, что это состояние сеанса db, которое вызывало таймауты.

Как только мы переключились на кеш AppFabric для управления состоянием сеанса, мы больше не испытывали никаких таймаутов.

Больше информации здесь: http://our.umbraco.org/forum/core/general/27179-SQL-Azure-connectivity-issues