Как избежать Sql Timeout в приложении-функции Azure - PullRequest
0 голосов
/ 06 октября 2018

Я разработал приложение с функцией триггера очереди в .Net Standard 2.0.Когда приложение было недоступно для обслуживания или в новой версии, может случиться так, что в очереди более 20000 сообщений.По сути, приложение считывает содержимое каждого XML-файла с помощью XMLReader и создает одну запись о нем.Эти записи напрямую вставляются в хранилище данных SQL Azure.Но когда приложение перезапускается, мы получаем довольно много ошибок зависимостей, все из-за ошибки входа в SQL.

  System.Data.SqlClient.SqlException (0x80131904): Connection Timeout Expired.
The timeout period elapsed during the post-login phase.
The connection could have timed out while waiting for server to complete the login process and respond; Or it could have timed out while attempting to create multiple active connections.
This failure occurred while attempting to connect to the routing destination.
The duration spent while attempting to connect to the original server was - [Pre-Login]

При просмотре статистики хранилища данных я вижу, что было активно более 800 соединенийв тот момент.Так что я понимаю, что это может быть слишком много, но как я могу решить это, я не думаю, что есть способ ограничить количество одновременных функций приложения, ...

Если у кого-то есть идея(даже в субботу вечером), пожалуйста, не стесняйтесь.

PS: В обычных операциях функция работает нормально, просто при перезапуске она срабатывает слишком быстро, слишком быстро ...

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если вы находитесь в плане потребления, возможно, это происходит из-за масштабного масштабирования вашего функционального приложения из-за большой очереди сообщений в очереди.В этом случае WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT документированный здесь поможет вам ограничить количество виртуальных машин, на которых работает ваше приложение (хотя это не 100% гарантированный предел из-за того, как система ведет себя, когда сталкивается с ограничениями емкости).

Эта проблема отслеживает улучшение общего опыта в этой области, но ETA отсутствует: https://github.com/Azure/azure-functions-host/issues/1207

0 голосов
/ 07 октября 2018

Мне бы хотелось больше узнать о приложении, потому что это анти-шаблон для загрузки ASDW.

Более нормальным подходом к этому требованию было бы измельчение XML в микропакетные файлы,затем проглотите файлы, используя Polybase.В зависимости от структуры зоны приземления даже перезапуск будет очень простой задачей.

Под каким DWU вы работаете?Эффект параллелизма этой модели может быть существенным, не только с низкой производительностью, но и с отрицательным влиянием на другие рабочие нагрузки в то время.

Отредактировано после ответов:

Если бы мне приходилось обрабатывать такую ​​рабочую нагрузку, какдля этого я бы использовал EventHub или Kafka для Databricks, уничтожил XML, а затем написал в ASDW.Вот замечательный пример, который обновляет микропакет в DW каждые 30 секунд:

https://azure.microsoft.com/en-au/blog/near-real-time-analytics-in-azure-sql-data-warehouse/

Этот подход будет загружать данные в ASDW с использованием Polybase, что будет значительно быстрее, чем вставки SQLи обеспечить расширенный параллелизм.

...