Просматривая журналы трассировки на 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, и определить, какое представление, панель управления или экран вызывают выполнение запроса, чтобы я мог его настроить?