На днях обнаружил, что на сервере CRM служба CRMAsyncService занимала 100% процессорного времени. Красивой "кардиограммой", так, занимала:

Решение нашлось быстро - изменить параметры одномоментно загружаемых системных задач в память. Параметры эти называются AsyncItemsInMemoryHigh и AsyncItemsInMemoryLow, и хранятся в метаданных, в таблице [MSCRM_CONFIG].[dbo].[DeploymentProperties]. К слову сказать, найденное решение очень близко описывало мою ситуацию - на тестовом сервере развернул промышленную базу.
![[MSCRM_CONFIG].[dbo].[DeploymentProperties]](/sites/default/files/img/crmasyncservice-100-percents-cpu-load/MSCRM_CONFIG-dbo-DeploymentProperties-AsyncItemsInMemory.PNG)
Простейший запрос помогает нам значительно снизить порог загружаемых в память задач.
UPDATE
[MSCRM_CONFIG].[dbo].[DeploymentProperties]
SET
IntColumn = 50
WHERE
ColumnName = N'AsyncItemsInMemoryHigh'
UPDATE
[MSCRM_CONFIG].[dbo].[DeploymentProperties]
SET
IntColumn = 20
WHERE
ColumnName = N'AsyncItemsInMemoryLow'
И это решение не помогло.
Посидев с профайлером, решил заглянуть в системные задания, и в представлении "Заблокированные системные задания" обнаружил одну запись бизнес-правила в статусе "Ожидание".

Т.е. на ровном месте, на одном из шагов этого правила обработка остановилась. Отменил процесс.

После чего загрузка процессора на сервере спала.
Напоследок упомяну, что для профилактики ошибочно завершённых задач бизнес-правил (workflow) в Microsoft Dynamics CRM можно создать следующее простое представление:

Регулярное обращение к этому представлению поможет вовремя найти ошибки в ваших бизнес-правилах.
Добавить комментарий