На одном из проектов возникла необходимость отслеживать очередь бизнесов процессов. Из существующих ресурсов, такую информацию можно получить лишь из журнала Docsvision Workflow, однако парсить текстовый журнал, который в процессе работы сервиса еще и записывается идея не лучшая. Принято решение разработать SQL запрос, который бы смог вычислять количество бизнес процессов, готовых к обработке.
SELECT Settings.ServiceID as ServerNode, Count(*) as 'Очередь процессов'
FROM [dvtable_{0EF6BCCA-7A09-4027-A3A2-D2EEECA1BF4D}] ProcInfo WITH(NOLOCK)
JOIN [dvtable_{B4A2559B-45FD-4ABA-919F-0F170CCDDB5D}] Settings WITH(NOLOCK)
ON Settings.ProcessedLBound <= ProcInfo.DateBeginMsecs AND
Settings.ProcessedUBound >= ProcInfo.DateBeginMsecs
JOIN dvsys_instances tInst WITH(NOLOCK)
ON tInst.InstanceID = ProcInfo.InstanceID
WHERE ProcInfo.[ReadyToRun] = 1
AND ProcInfo.[State] = 1
AND ISNULL(tInst.[Deleted], 0) = 0
AND ISNULL(tInst.[Template], 0) = 0
GROUP BY Settings.ServiceID
ORDER BY ServerNode;
Запрос можно оформить в виде джоба и выполнять с заданной периодичностью или вызывать запрос в сервисах мониторинга, а при высоких значениях отправлять уведомление администратору.
Добавить комментарий