AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.07.2014, 20:13   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
i-neti: Топ 10 проблем, обнаруженных при проверке кода в Dynamics AX
Источник: http://i-neti.ru/blog/203
==============

Три года назад, наша команда (Premier Field Engineer) приступила к проверке кода Dynamics AX для ключевых клиентов. Это было довольно интересно, в связи с множеством модификаций различных проектов.

подробнее



Источник: http://i-neti.ru/blog/203
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 23.07.2014, 13:40   #2  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
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).
Старый 24.07.2014, 04:19   #3  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,129 / 916 (35) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Napalm Посмотреть сообщение
Ай да молодцы! Ай да пофиксили!
Для меня операторы, начинающиеся с большой буквы, признак больших проблем в коде. Точно не знаю, откуда приходят эти люди, но код они повреждают в примерно одинаковом стиле. Особенно ужасно их "улучшения" сказываются на производительности. Именно после них удается показывать чудеса оптимизации на 2 порядка чисто правкой X++.
__________________
Isn't it nice when things just work?
За это сообщение автора поблагодарили: kornix (3).
Старый 24.07.2014, 12:50   #4  
Link is offline
Link
Британский учённый
Аватар для Link
Соотечественники
 
568 / 513 (19) +++++++
Регистрация: 25.11.2005
Адрес: UK
Записей в блоге: 9
Цитата:
Сообщение от macklakov Посмотреть сообщение
Точно не знаю, откуда приходят эти люди, но код они повреждают в примерно одинаковом стиле.
Я знаю от куда, как раз работаю у индусов, могу познакомить
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Старый 24.07.2014, 13:30   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,892 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Говоря о сути проблемы: Чтобы там не писалось в best practice, на мой взгляд, перечисление выбираемых полей в select имеет смысл только в двух случаях:
1. Есть покрывающий индекс (и мы боремся за скорость какого-то очень часто выполняющегося запроса).
2. Массово выбираем данные из какой-то очень разбухшей таблицы (то есть - больше 20-25 полей и выбираем тысячи, а не десятки записей).
Во всех остальных случаях - экономия нескольких килобайт трафика между AOS и сервером БД не покроет потенциального гемора с попыткой доступа к непрочитанному полю при быстром латании кода.

Ну и конечно - если ни одно поле из таблицы вообще не используется - ей самое место в exists join или в join tableid from table.
Старый 24.07.2014, 19:34   #6  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от fed Посмотреть сообщение
1. Есть покрывающий индекс (и мы боремся за скорость какого-то очень часто выполняющегося запроса).
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим

большой выигрыш кстати дает перечисление полей при наличие в таблице полей с типом контейнер(они хранятся в бд отдельно от строк, и запрос к ним резко снижает скорость выборки), но это уже косяки проектирования
Старый 25.07.2014, 09:09   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от trud Посмотреть сообщение
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим
Не пробовали группировку добавить по отбираемым полям ?
По идее план запроса не должен ухудшиться - все равно по индексу пойдет перебор.
За это сообщение автора поблагодарили: trud (2).
Старый 13.10.2015, 14:04   #8  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от trud Посмотреть сообщение
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим
Назначать кластерным индекс по RecId
__________________
-ТСЯ или -ТЬСЯ ?
Старый 13.10.2015, 21:54   #9  
Удвой Покуров is offline
Удвой Покуров
Участник
 
461 / 228 (8) ++++++
Регистрация: 03.04.2011
Хорошо что ребята хоть разбираются. А то обычная проблема номер 1 при аудите: посмотрели код, не поняли что за язык, стали судорожно звонить менеджеру.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Квест: Подружим Dynamics Ax 2009 Sp1 RU7 c SharePoint Foundation 2010 Blog bot DAX Blogs 4 16.10.2017 17:50
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 15 Blog bot Dynamics CRM: Blogs 1 10.02.2016 10:26
atinkerersnotebook: Using PowerPivot to Analyze Dynamics AX Data Blog bot DAX Blogs 1 05.10.2013 07:23
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 12 Blog bot Dynamics CRM: Blogs 0 30.01.2013 01:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.