BizTalk 2013 R2 XLANG - исключение произошло при сохранении состояния в базе данных

Я работаю над BizTalk 2013 R2. У меня есть оркестровка, где я вызываю вспомогательный класс для вызова веб-службы (для более низкой задержки). Класс является Сериализуемым классом. Оркестровка строится успешно. И когда я тестировал решение от POSTMan, оно отлично работает.

Но для каждого успешного ответа я также получаю исключение в журнале событий.

xlang/s engine event log entry: An unrecoverable exception (see the 'inner exception' below) has occurred.
Service Name: Orchestration Name
Service Id: df34c579-a9e6-5696-e322-b80210d1f723
Instance Id: 0512ae45-c89c-4ffc-9bd2-332b854d4965      
An exception occurred when persisting state to the database.       
Exception type: PersistenceException

Source: Microsoft.XLANGs.BizTalk.Engine
Target Site: Void Commit()
The following is a stack trace that identifies the location where the 
      exception occurred
      at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.Commit()
      at 

    Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.ScheduleComplete(Boolean terminate)
          at Microsoft.XLANGs.Core.Service.Persist(Boolean dehydrate, Context ctx, Boolean idleRequired, Boolean finalPersist, Boolean bypassCommit, Boolean terminate)
          at Microsoft.XLANGs.Core.ServiceContext.OnCommit()
          at "OrchestrationInstanceName".segment0(StopConditions stopOn)
          at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

Additional error information:

A batch item failed persistence Item-ID 9b508582-438f-442d-a320-3ff7d9dd87ed OperationType MAIO_CommitBatch Status -1061151938 ErrorInfo A database failure occurred due to an unexpected failure. .

Exception type: PersistenceItemException

Произошла ошибка базы данных, сопровождаемая этой ошибкой постоянства.

Не удалось выполнить следующий вызов хранимой процедуры: " { call [dbo]. [Bts_UpdateMsgbox_XXXXXX](?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}". SQL Server возвратил строку ошибки: "Предупреждение. Порядок соединения был применен, потому что используется локальная подсказка соединения.; Предупреждение: Порядок соединения был применен, потому что используется локальная подсказка соединения.; Дублирующий ключ был проигнорирован.".

я добавил system.diagnostics.trace в форме вызова вспомогательного класса.net. Затем я заметил, что оркестровка, запускаемая дважды при первом запуске, выдает ошибку Xlang - Постоянная ошибка и база данных - "Дублированный ключ был проигнорирован", и затем оркестровка запускается во второй раз, и она успешно завершается с ответом.

Трассировка журнала событий

Очевидно, что моя оркестровка проходит дважды. Затем я добавил область вокруг формы, вызывающей вспомогательный класс. Тип транзакции области - "Нет".

Тогда проблема с ошибкой Xlang Persistence была решена.

Почему мне нужно добавить дополнительную область вокруг вызовов, чтобы это работало без ошибок?

1 ответ

Подобные ошибки обычно указывают на то, что ваш BizTalkMsgBoxDb страдает от плохой производительности. Первоначально я рекомендую запустить BizTalk Health Monitor, который укажет наиболее очевидные причины. Скорее всего, существует множество сообщений от зомби / осиротевших, которые этот инструмент также может помочь убрать.

Также взгляните на оптимизацию базы данных:

  • неверные настройки базы данных
  • большая фрагментация индекса
  • большое количество приостановленных экземпляров - они должны регулярно прекращаться

(обратитесь к https://msdn.microsoft.com/en-us/library/cc296892%28v=bts.10%29.aspx за подробной информацией)

Учтите также:

  • Сокращение времени для отслеживания истории https://msdn.microsoft.com/en-us/library/aa558715.aspx
  • Сокращение количества отслеживаемых артефактов и событий - отключение несущественно (наилучшей практики для производства нет вообще)

Если событие не поможет, вам нужно оценить производительность диска сервера базы данных. Возможно, вам придется перейти на более быстрое хранение

Другие вопросы по тегам