29.04.2022, 10:20 | #1 |
Участник
|
Индексы таблиц (DAX2012)
Добрый день!
Уже некоторое время происходит непонятное с таблицами InventTrans и PriceDiscTable. Запросы, в которых присутствует "order by Date" начинают безбожно висеть. Спасает только реиндексация таблицы. С чем может быть связана такая проблема? З.ы. периодически при запуске реиндексации вылезает ошибка, что Система не может создать индекс потому что он уже существует |
|
29.04.2022, 15:31 | #2 |
Участник
|
Цитата:
Предположу что в запросе фильтр по одним полям, а сортировка по другим и его клинит. Если фильтрация попадает на нужный индекс, и вы знаете что он правильный то можно в запросе в начале добавить сортировку по его полям. Из-за фильтрации это не изменит результирующую выборку но поможет оптимизатору запросов не ошибаться. Но в начале нужно понять какой же индекс (какой план запроса) оптимизатор выбирает при тормозах. а дальше уже можно понимать из-за чего так и что поправить. |
|
29.04.2022, 21:59 | #3 |
Участник
|
А вместо переиндексации обновление статистики делать не пробовали?
Т.е. запускаете запрос с Order By и в момент его выполнения (это важно) запускаете обновление статистики. Следующий запрос с Order By должен выполниться быстрее
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
02.05.2022, 12:48 | #4 |
Участник
|
Скорее всего это сниффинг параметров. Переиндексация или сбор статистики вряд ли помогут решить проблему.
Возможные пути решения и мониторинга таких ситуаций можно почитать вот здесь: Resolving performance issues caused by parameters sniffing in AX2012 and D365FO Monitoring the most problematic performance problem in Dynamics AX - parameters sniffing |
|
12.05.2022, 21:11 | #5 |
Участник
|
В общем по результатам различных манипуляций удалось обнаружить следующее:
сам по себе ORDER BY работает без тормозов, даже по дате. Если в SELECT добавить EXIST JOIN INVENTDIM (без ORDER BY), также все норм. Но если их объединить в одном SELECT, то возникают лаги, если начать фильтровать INVENTDIM пустыми значениями, например WHERE INVENTDIM.INVENTCOLORID == ''. Как только в SELECT был добавлен #InventDimExistsJoin, проблема ушла. |
|
13.05.2022, 10:10 | #6 |
Участник
|
Стоит обратить внимание на объем таблицы InventDim и почистить с помощью класса InventUnusedDimCleanUp:
Inventory management > Periodic > Clean up > Inventory dimensions cleanup
__________________
// no comments |
|
|
|