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

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

Подробный анализ. У нас есть процесс, при котором мы часто предоставляем / не передаем записи об объектах команде Access. Асинхронные плагины выполняются после создания и обновления. Dynamics CRM интегрирован с несколькими системами и получает обновления в системе. Мы столкнулись с проблемой, поскольку эти асинхронные плагины не работают с ошибкой SQL,

Sql error: Generic SQL error. CRM ErrorCode: -2147204784 Sql ErrorCode: -2146232060 Sql Number: 1205

В веб-приложении Dynamics 365, если пользователь создает / обновляет запись, подключаемый модуль запускается и завершается успешно. Проблема в том, что если запись обновляется через интегрированные системы, в этот момент плагины не работают. Мы попытались решить проблему ниже,

  1. Изменен порядок выполнения Async Plugins.
  2. Оптимизирован код плагина

Это не очень помогает, можно ли как-нибудь установить задержки между запусками плагинов? Или каким-либо другим способом мы можем преодолеть это препятствие?

*** Microsoft заявляет, что частота обновления записи слишком высока (разница 0,07 секунды между двумя обновлениями записи). Тупик возникает из-за выполнения внутреннего SP p_CascadeRevokeAccess.


person Nachiket    schedule 18.08.2020    source источник
comment
Сегодня я столкнулся с той же проблемой в моем UAT, мы меняем плагин Post-Create на синхронный. Ошибка исчезла :) Хотя в Prod с плагином Async проблем нет   -  person Arun Vinoth    schedule 20.08.2020


Ответы (1)


Sql номер 1205 является ключевым, транзакция вызывает некоторые взаимоблокировки.

Ошибка 1205: транзакция (идентификатор процесса) зашла в тупик на ресурсах с другим процессом и была выбрана жертвой тупика. Повторите транзакцию

Я бы порекомендовал вам позаботиться о нескольких вещах:

  1. Вы уже упоминали, что оптимизировали код плагина, убедитесь, что у вас нет блокировки в любом выражении запроса или запросе fetchxml, который вы используете в коде плагина.
  2. Если вы рекурсивно обновляете одну и ту же запись объекта в плагине, попробуйте использовать предварительную операцию создания / обновления сообщения и обновить целевые атрибуты в одной синхронной транзакции вместо слишком большого количества асинхронных транзакций.
  3. Не уверен, сколько шагов запускается в вашем плагине после операции, хотя порядок выполнения установлен правильно, в определенном порядке можно управлять только порядком выполнения внутри одной транзакции. Но вы не можете контролировать порядок выполнения шага 1 второй транзакции для запуска после шага 2 первой транзакции обновления той же записи объекта вашими вышестоящими системами.

Поэтому попробуйте составить необходимый поток и перетасовать код на каждом шаге плагина для лучшей обработки. Хотя платформа CRM позаботится о некоторых оптимистичных методах параллелизма, вы должны позаботиться о своей реализации. В противном случае это станет кошмаром для обслуживания, и дальнейшие улучшения могут оказаться невозможными.

Также вы упомянули о совместном использовании / отмене совместного использования с использованием групп доступа, существует вероятность, что эта проблема может быть связана с обновлениями таблицы доступа к основным объектам (POA). При необходимости обратитесь в Microsoft, чтобы получить билет в службу поддержки высшего качества.

person Arun Vinoth    schedule 18.08.2020
comment
@Nachiket ого, сам узнаешь или тикет MS? - person Arun Vinoth; 20.08.2020
comment
Спасибо @Arun, я обновил вопрос, добавленный в последней строке. Я мог бы использовать No Lock при извлечении записей в CRM, я полагаю, это не поможет мне, потому что тупиковая ситуация возникает при отмене доступа из группы доступа. - person Nachiket; 20.08.2020
comment
@Nachiket в моих предыдущих заданиях, мы делали некоторое совместное использование в плагинах и некоторых в пакетах SSIS Kingswaysoft через регулярные промежутки времени, чтобы разделить нагрузку ... вы должны попробовать это. - person Arun Vinoth; 21.08.2020