Тайм-аут SQL Azure

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

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

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

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


person januszstabik    schedule 23.12.2011    source источник
comment
В /microsoft-crm/microsoft-crm-2011.aspx (по ссылке: xxxxxxxxxxx): umbraco.DataLayer.SqlHelperException: исключение Umbraco (DataLayer): вспомогательное исключение SQL в ExecuteReader ---> System.Data.SqlClient.SqlException: Timeout истекший. Время ожидания истекло до завершения операции или сервер не отвечает. в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection) в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () в System.Data.SqlClient.TdsParserStateObject.ReadSniError .SqlClient.TdsParserStateObject.ReadSni (DbAsyncResult asyncResult, TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket (. , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.DataFata.SlataClader. , RunBehavior runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand. .Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior, cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String) в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior, поведение. поведение) в Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader (String connectionString, CommandType commandType, String commandText, SqlParameter [] commandParameters) в umbraco.DataLayer.SqlHelpers.SqlServer.SqlServerHelper.ExecuteReader (параметры команды] .DataLayer.SqlHelper_1 _1.ExecuteReader (String commandText, IParameter [] parameters) в umbraco.macro..ctor (Int32 id) в 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 (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Control.InitRecursive (Control namingContainer) в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforePointAsyncPoint)   -  person astaykov    schedule 23.12.2011


Ответы (2)


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

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

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

Помните об индексах: они вам понадобятся!

person Jeremy McGee    schedule 23.12.2011

После того, как мы перешли на кеш AppFabric для управления состоянием сеанса, у нас больше не было тайм-аутов.

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

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

person Lennart Stoop    schedule 12.01.2012