Отслеживание повторяющегося запроса обратно к его источнику в MS Dynamics CRM 2015 - PullRequest
1 голос
/ 02 июля 2019

Просматривая журналы трассировки на SQL Server, я вижу один запрос, который выполняется примерно 2500 раз в день, причем каждый запуск занимает в среднем 3200 мс, 500 000 логических чтений и 1300 физических чтений.

Этот запрос каждый раз возвращает 5 одинаковых строк.

SELECT TOP # "productpricelevel0".ProductId AS "productid",
    "productpricelevel0".UoMId AS "uomid",
    "productpricelevel0".ProductPriceLevelId AS "productpricelevelid",
    coalesce("LL0".Label, "productpricelevel0".ProductIdName) AS "productidname",
    "productpricelevel0".UoMIdName AS "uomidname"
FROM ProductPriceLevel AS "productpricelevel0" WITH (NOLOCK)
LEFT JOIN BusinessDataLocalizedLabel AS "LL0"
    ON (
            "LL0".ObjectId = "productpricelevel0".ProductId
            AND "LL0".LanguageId = @LanguageId0
            AND "LL0".ObjectColumnNumber = @ObjectColumnName0
            )
ORDER BY productidname ASC,
    "productpricelevel0".ProductPriceLevelId ASC

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

Если бы я мог редактировать источник этого запроса, я мог бы решить проблемы с производительностью, например, есть большая выгода от указания таблицы в предложении order by. Но это не мой код.

Я бы хотел выяснить, что в системе работает, и остановить его запуск 2500 раз в день.

Как отследить запрос, попадающий на сервер SQL, и определить, какое представление, панель управления или экран вызывают выполнение запроса, чтобы я мог его настроить?

1 Ответ

1 голос
/ 08 июля 2019

Вы можете использовать трассировки платформы CRM для получения более подробной информации.Платформа CRM отслеживает подробный журнал уровня и запросы SQL, которые выполняются для БД.По сути, вы можете:

  1. Включить трассировки платформы CRM на подробном уровне с помощью стека вызовов - это очень важно, так как стек вызовов может указать вам, кто генерирует запрос.Если это стандартный запрос CRM, тогда вы ничего не можете сделать, однако если это запрос, сгенерированный плагином, вы можете провести некоторую оптимизацию (вы увидите это из пространств имен, присутствующих в стеке вызовов, обычноMS CRM выглядит как Microsoft.Crm.etc, тогда как пользовательские плагины имеют собственное пространство имен).
  2. Вы можете выполнять поиск в кривых по ключевым словам, которые появляются в приведенном выше запросе, например productpricelevel0
  3. После того, как вы определили запрос, найдите поток, который выполняет запрос, и вызовы стекаются наэтот поток, чтобы увидеть, создается ли он с помощью плагина или рабочего процесса или вызова пользовательской веб-службы, или это стандартная операция CRM.

Вы можете включить трассировку CRM-платформы в реестре либо через реестр https://support.microsoft.com/en-us/help/907490/how-to-enable-tracing-in-microsoft-dynamics-crm, либо с помощью некоторых инструментов codeplex https://archive.codeplex.com/?p=crmdiagtool2011. Вам необходимо включить трассировки в WebServer, Sandbox и Async.Сервер (так как вы точно не знаете, откуда это происходит)

Кроме того, читая трассировки, вы можете использовать некоторые анализаторы трассировки сообщества, такие как https://archive.codeplex.com/?p=crmtracereader.. Вы можете использовать это для фильтрации по потоку.number.

К сожалению, поскольку вы еще не знаете, как воспроизвести этот запрос по требованию, вам придется включить трассировки платформы CRM на уровне Verbose и оставить их запущенными в течение определенного периода времени (вероятно, посмотрите, когдаэтот запрос чаще всего генерируется в течение дня и включает трассировки на короткий промежуток времени в течение этого интервала и повторяет эту операцию до тех пор, пока не получит необходимую информацию. Это далеко не идеально, так как это повлияет на производительность и зависит от нагрузкисоздать много файлов журналов на сервере CRM, но из моего опыта это ваш лучший шанс получитьТочный ответ на ваш вопрос.

...