![]() |
#1 |
Участник
|
i-neti: Топ 10 проблем, обнаруженных при проверке кода в Dynamics AX
Источник: http://i-neti.ru/blog/203
============== Три года назад, наша команда (Premier Field Engineer) приступила к проверке кода Dynamics AX для ключевых клиентов. Это было довольно интересно, в связи с множеством модификаций различных проектов. подробнее Источник: http://i-neti.ru/blog/203
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
![]() |
#2 |
Участник
|
Цитата:
3. Большие и ресурсоемкие запросы связанные с выборкой всех полей таблицы
Это возможно самая распространенная проблема имеющая большое влияние на производительность, но в то же время ее проще всего обнаружить и исправить. Используйте Exist Join и перечисление полей, всегда когда это возможно. Убедитесь, что в каждой выборке в коде указаны только необходимые поля. Та же идея с использованием exist join в выборке когда это возможно, для уменьшения объема данных передаваемых между AOS и базой данных. Это особенно актуально когда при модификации на существующие таблицы добавляется много новых полей. Например, код: X++: While select TableA { Select TableB where TableB.FieldA == TableA.FieldA; Print TableB.FieldB; } X++: While select FieldA from TableA Join FieldA, FieldB from TableB Where TableB.FieldA == TableA.FieldA; { Print TableB.FieldB; } |
|
|
За это сообщение автора поблагодарили: macklakov (3), S.Kuskov (1), kornix (1). |
![]() |
#3 |
NavAx
|
Для меня операторы, начинающиеся с большой буквы, признак больших проблем в коде. Точно не знаю, откуда приходят эти люди, но код они повреждают в примерно одинаковом стиле. Особенно ужасно их "улучшения" сказываются на производительности. Именно после них удается показывать чудеса оптимизации на 2 порядка чисто правкой X++.
__________________
Isn't it nice when things just work? |
|
|
За это сообщение автора поблагодарили: kornix (3). |
![]() |
#4 |
Британский учённый
|
Цитата:
![]()
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще. |
|
![]() |
#5 |
Moderator
|
Говоря о сути проблемы: Чтобы там не писалось в best practice, на мой взгляд, перечисление выбираемых полей в select имеет смысл только в двух случаях:
1. Есть покрывающий индекс (и мы боремся за скорость какого-то очень часто выполняющегося запроса). 2. Массово выбираем данные из какой-то очень разбухшей таблицы (то есть - больше 20-25 полей и выбираем тысячи, а не десятки записей). Во всех остальных случаях - экономия нескольких килобайт трафика между AOS и сервером БД не покроет потенциального гемора с попыткой доступа к непрочитанному полю при быстром латании кода. Ну и конечно - если ни одно поле из таблицы вообще не используется - ей самое место в exists join или в join tableid from table. |
|
![]() |
#6 |
Участник
|
Цитата:
большой выигрыш кстати дает перечисление полей при наличие в таблице полей с типом контейнер(они хранятся в бд отдельно от строк, и запрос к ним резко снижает скорость выборки), но это уже косяки проектирования |
|
![]() |
#7 |
Участник
|
Цитата:
По идее план запроса не должен ухудшиться - все равно по индексу пойдет перебор. |
|
|
За это сообщение автора поблагодарили: trud (2). |
![]() |
#8 |
Модератор
|
Цитата:
![]()
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#9 |
Участник
|
Хорошо что ребята хоть разбираются. А то обычная проблема номер 1 при аудите: посмотрели код, не поняли что за язык, стали судорожно звонить менеджеру.
|
|
|
|