2016-12-14 8 views
1

Я создаю рабочие задания hangfire как «BackgroundJob.Enqueue (x => x.Recalculate (itemID)); для очереди задания. Когда я пытаюсь сохранить последовательно несколько раз, я получаю следующую ошибку от Hangfire.Hangfire - создание фоновой работы не удалось. См. Внутреннее исключение для подробностей

Вот трассировки стека, сообщение

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) 
    at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) 
    at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 
    at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) 
    at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) 
    at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) 
    at Hangfire.SqlServer.SqlServerWriteOnlyTransaction.<>c__DisplayClass7_0.<SetJobState>b__0(SqlConnection x) 
    at Hangfire.SqlServer.SqlServerWriteOnlyTransaction.<Commit>b__4_0(SqlConnection connection) 
    at Hangfire.SqlServer.SqlServerStorage.<>c__DisplayClass17_0.<UseTransaction>b__0(SqlConnection connection) 
    at Hangfire.SqlServer.SqlServerStorage.UseConnection[T](Func`2 func) 
    at Hangfire.SqlServer.SqlServerStorage.UseTransaction[T](Func`2 func, Nullable`1 isolationLevel) 
    at Hangfire.SqlServer.SqlServerStorage.UseTransaction(Action`1 action) 
    at Hangfire.Client.CoreBackgroundJobFactory.Create(CreateContext context) 
    at Hangfire.Client.BackgroundJobFactory.<>c__DisplayClass7_0.<CreateWithFilters>b__0() 
    at Hangfire.Client.BackgroundJobFactory.InvokeClientFilter(IClientFilter filter, CreatingContext preContext, Func`1 continuation) 
    at Hangfire.Client.BackgroundJobFactory.Create(CreateContext context) 
    at Hangfire.BackgroundJobClient.Create(Job job, IState state) 

Исключение: создание рабочих мест фона не удалось. См. Внутреннее исключение для подробностей. (BackgroundJobClientException)

Внутренний пример: время ожидания выполнения истекло. Период ожидания истекает до завершения операции или сервер не отвечает.

Кто-нибудь сталкивался с этой проблемой? Это прекрасно работает на местном уровне. Но проблема возникает в Azure Deployment. Я использую базу данных v12. Цените любую помощь. Я заметил, что все мои работы по созданию рабочего места в среднем занимают 20 секунд, чтобы ставить в очередь фоновые задания. Когда я пытаюсь создать задание снова и снова, время истекает. Время ожидания составляет 30 секунд.

Я попытался увеличить время ожидания соединения, но какое бы значение я не вложил в строку подключения, кажется, что он истекает через 30 секунд. Но увеличение тайм-аута в любом случае не решит основной вопрос.

+0

Какой у вас график использования DTU в вашей базе данных SQL? –

ответ

0

Я понял, что использование DTU составляет 100% большую часть времени, что было неприемлемо, поскольку в тестовой среде ничего не происходило, что я тестировал это. Затем я просмотрел данные о производительности в базе данных Azure, которые дали мне самые плохие запросы, что было очень удобно. Проблема с заданиями на удаление Handfire вызывала эту проблему с производительностью. Это была проблема с версией Hangfire, которую мы использовали. Решение заключалось в том, чтобы обновить Hangfire до последней версии.

 Смежные вопросы

  • Нет связанных вопросов^_^