Lers.ExceptionHandler Необработанная ошибка в сервере. "Ошибка выполнения запроса POST

Версия ЛЭРС УЧЁТ: 3.46.2
Сервер БД: SQL Server

Добрый день, эпизодически ночью начала зависать служба Опроса. В журнале событий вот такие ошибки.
После этого служба опроса зависает полностью или частично, начинает работать только после ручного перезапуска служб.

Lers.ExceptionHandler	Необработанная ошибка в сервере. "Ошибка выполнения запроса POST http://localhost:10000/api/v0.1/Poll/ServiceCommands/Events/PollDeviceResult. 
Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.". Разработчикам был отправлен отчет об ошибке.	1. [Microsoft.Data.SqlClient] System.InvalidOperationException: Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

Стек вызовов:
   at Microsoft.Data.Common.ADP.ExceptionWithStackTrace(Exception e)
--- End of stack trace from previous location ---
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenInternalAsync(Boolean errorsExpected, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenAsync(CancellationToken cancellationToken, Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.<>c__DisplayClass33_0`2.<<ExecuteAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync[TState,TResult](Func`4 operation, Func`4 verifySucceeded, TState state, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteImplementationAsync[TState,TResult](Func`4 operation, Func`4 verifySucceeded, TState state, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.ExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
   at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleAsync[TSource](IAsyncEnumerable`1 asyncEnumerable, CancellationToken cancellationToken)
   at Lers.Dal.EquipmentPollStatDataAccess.InsPollStatistics(Int32 equipmentId, Int32 pollSessionId, DateTimeOffset endDate, PollError pollResult, Int32 pollErrorCount)
   at lambda_method11027(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

HResult:-2146233079

Дополнительная информация (Data):
ClientApp=Служба опроса
RequestBody={"PollResult":22,"PollErrorCount":6,"PollSessionId":70879992,"EquipmentId":790,"Model":283,"SerialNumber":"1103200199","MeasurePoints":[1402],"EventCode":15}
--------------------------------------------------------------------------------------

Как можно решить эту проблему? Спасибо

Данная ошибка говорит о том, что СУБД SQL Server не успевает ответить на запрос за отведенное время. Согласно правилам оказания услуг технической поддержки она не может быть оказана по предыдущим версиям. Вам необходимо выяснить по какой причине ваша СУБД отвечает так долго и устранить ее. Возможно вам окажется полезной официальная статья по данной ошибке.
Также вы можете попробовать увеличить время ожидания ответа от БД в настройках Сервера ЛЭРС УЧЕТ.

1 лайк

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

Если это GPRS модемы, то стоит разнести их подключение по времени. Если это опрос по расписанию, нужно назначить разное расписание для точек учёта.