Мониторинг пула подключений и долгих транзакций

Данный материал предназначен для продвинутых пользователей. Если у вас есть вопросы по применению, обратитесь в Техническую поддержку BPMSoft.

В BPMSoft важно контролировать состояние пула подключений и отслеживать долгоживущие транзакции. Это позволяет своевременно выявлять проблемы и предотвращать ошибки, связанные с исчерпанием соединений.

Данный инструмент актуален только для BPMSoft на платформе .NET Framework.

Включение логирования пула подключений

Логирование состояния пула подключений позволяет контролировать количество занятых соединений и максимальный размер пула. Для активации этой функции во «внутреннем» web.config необходимо задать следующую настройку:

<add key="EnableDbConnectionPoolStatusLogging" value="true" />

Частота логирования задается параметром LongLivedDbOperationLoggingFrequencyMinutes:

<add key="LongLivedDbOperationLoggingFrequencyMinutes" value="3" />

Пример лога:

2024-11-26 11:52:06,684 [37] WARN dev$ DbConnection LogDbConnectionPoolStatus - DbConnectionPool info. Busy: 2 MaxPoolSize: 20

Логи по умолчанию записываются в Common, так как используется логгер DbConnection, не указанный в NLog.config.

Логирование долгоживущих транзакций и подключений

Долгоживущими считаются транзакции или подключения, существующие дольше установленного порога. Для их логирования во «внутреннем» web.config необходимо добавить следующие параметры:

<add key="LongLivedDbOperationAgeThresholdMinutes" value="3" />
<add key="EnableLongLivedDbTransactionsLogging" value="true" />
<add key="EnableLongLivedDbConnectionsLogging" value="true" />

Где:

  • LongLivedDbOperationAgeThresholdMinutes — задает порог в минутах, по истечении которого транзакции и подключения считаются долгими;
  • EnableLongLivedDbTransactionsLogging — включает логирование долгих транзакций;
  • EnableLongLivedDbConnectionsLogging — включает логирование долгих подключений.

Логирование осуществляется с периодичностью, установленной в LongLivedDbOperationLoggingFrequencyMinutes.

Пример лога:

2024-11-26 11:53:06,687 [87] WARN dev$ DbConnection ForEach - DbConnection opened on: 11/26/2024 11:49:12 AM. CallStack:
   at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at BPMSoft.Core.DB.DBExecutor.<get_DBConnection>b__23_0()
   at Polly.Policy.<>c__DisplayClass109_0.<Execute>b__0(Context ctx, CancellationToken ct)
   at Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct)
   at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.Execute(Action`2 action, Context context, CancellationToken cancellationToken)
   at Polly.Policy.Execute(Action action)
   at BPMSoft.Core.DB.DBExecutor.get_DBConnection()
   at BPMSoft.Core.DB.DBExecutor.CreateCommand()
   at BPMSoft.Core.DB.DBExecutor.<ExecuteCommandAsync>d__111`1.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start[TStateMachine](TStateMachine& stateMachine)
   at BPMSoft.Core.DB.DBExecutor.ExecuteCommandAsync[TResult](Func`2 commandExecutionCallback, Func`2 commandExecutionCallbackAsync, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken, Boolean sync)
   at BPMSoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)
   at BPMSoft.Core.DB.DBExecutor.InternalExecuteScalar[TResult](String sqlText, QueryParameterCollection queryParameters)
   at BPMSoft.DB.PostgreSql.PostgreSqlExecutor.<>c__DisplayClass43_0`1.<InternalExecuteScalar>b__0()
   at BPMSoft.DB.PostgreSql.PostgreSqlExecutor.ExecuteInLockIfInTransaction[TResult](Func`1 action)
   at BPMSoft.Core.DB.Select.<ExecuteScalarAsync>d__57`1.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start[TStateMachine](TStateMachine& stateMachine)
   at BPMSoft.Core.DB.Select.ExecuteScalarAsync[TResult](Boolean sync)
   at BPMSoft.Core.DB.Select.ExecuteScalar[TResult]()
   at BPMSoft.Core.Configuration.SysAdminUnit.GetUserId(UserConnection userConnection, String userName)
   at BPMSoft.Web.Common.AuthModule.IsForbiddenPageForServiceUser(HttpContextBase httpContext)
   at BPMSoft.Web.Common.AuthModule.OnAuthenticateRequest(HttpContextBase context)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
   at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
   at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
   at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

Использование

Данный механизм помогает анализировать проблемы, связанные с исчерпанием пула подключений, например, ошибки вида:

The connection pool has been exhausted, either raise MaxPoolSize (currently 1024) or Timeout (currently 500 seconds).

Логирование с указанием стектрейса упрощает поиск источников проблемных запросов.

Материал был полезен для вас?
Вебинар: 22 апреля в 11:00
Приглашаем вас на вебинар «BPMSoft – от выбора к реальным процессам», где покажем, как компании на практике сокращают time-to-market и масштабируют бизнес с помощью решений BPMSoft.
Регистрация на мероприятие
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Оставить заявку
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Рассчитать стоимость
Задать вопрос
Карта сценариев использования ИИ для управления маркетингом, продажами и сервисом
Заполните форму и мы отправим исследование на E-mail
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Стать образовательным партнёром
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Проверьте вашу почту
Для завершения подписки перейдите по ссылке в письме, которое мы только что отправили. Если письма нет во «Входящих», проверьте папку «Спам».
Telegram Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее