AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 22.07.2014, 20:13   #1  
Blog bot is offline
Blog bot
Участник
 
25,646 / 848 (80) +++++++
Join Date: 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, напишите личное сообщение администратору.
Old 23.07.2014, 13:40   #2  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Join Date: 23.05.2012
Quote:
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;
              }
Ай да молодцы! Ай да пофиксили!
This post has been rated by: macklakov (3), S.Kuskov (1), kornix (1).
Old 24.07.2014, 04:19   #3  
macklakov is offline
macklakov
NavAx
macklakov's Avatar
 
2,347 / 996 (38) +++++++
Join Date: 03.04.2002
Quote:
Originally Posted by Napalm View Post
Ай да молодцы! Ай да пофиксили!
Для меня операторы, начинающиеся с большой буквы, признак больших проблем в коде. Точно не знаю, откуда приходят эти люди, но код они повреждают в примерно одинаковом стиле. Особенно ужасно их "улучшения" сказываются на производительности. Именно после них удается показывать чудеса оптимизации на 2 порядка чисто правкой X++.
__________________
Isn't it nice when things just work?
This post has been rated by: kornix (3).
Old 24.07.2014, 12:50   #4  
Link is offline
Link
Британский учённый
Link's Avatar
Соотечественники
 
568 / 523 (19) +++++++
Join Date: 25.11.2005
Location: UK
Blog Entries: 9
Quote:
Originally Posted by macklakov View Post
Точно не знаю, откуда приходят эти люди, но код они повреждают в примерно одинаковом стиле.
Я знаю от куда, как раз работаю у индусов, могу познакомить
__________________
Людям физического труда для восстановления своих сил нужен 7-8 часовой ночной сон. Людям умственного труда нужно спать часов 9-10. Ну а программистов будить нельзя вообще.
Old 24.07.2014, 13:30   #5  
fed is offline
fed
Moderator
fed's Avatar
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,914 / 5737 (197) ++++++++++
Join Date: 13.03.2002
Location: Hüfingen,DE
Говоря о сути проблемы: Чтобы там не писалось в best practice, на мой взгляд, перечисление выбираемых полей в select имеет смысл только в двух случаях:
1. Есть покрывающий индекс (и мы боремся за скорость какого-то очень часто выполняющегося запроса).
2. Массово выбираем данные из какой-то очень разбухшей таблицы (то есть - больше 20-25 полей и выбираем тысячи, а не десятки записей).
Во всех остальных случаях - экономия нескольких килобайт трафика между AOS и сервером БД не покроет потенциального гемора с попыткой доступа к непрочитанному полю при быстром латании кода.

Ну и конечно - если ни одно поле из таблицы вообще не используется - ей самое место в exists join или в join tableid from table.
Old 24.07.2014, 19:34   #6  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1635 (57) ++++++++
Join Date: 07.06.2003
Blog Entries: 1
Quote:
Originally Posted by fed View Post
1. Есть покрывающий индекс (и мы боремся за скорость какого-то очень часто выполняющегося запроса).
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим

большой выигрыш кстати дает перечисление полей при наличие в таблице полей с типом контейнер(они хранятся в бд отдельно от строк, и запрос к ним резко снижает скорость выборки), но это уже косяки проектирования
Old 25.07.2014, 09:09   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4,001 / 3298 (118) ++++++++++
Join Date: 12.10.2004
Location: Москва
Blog Entries: 2
Quote:
Originally Posted by trud View Post
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим
Не пробовали группировку добавить по отбираемым полям ?
По идее план запроса не должен ухудшиться - все равно по индексу пойдет перебор.
This post has been rated by: trud (2).
Old 13.10.2015, 14:04   #8  
Vadik is offline
Vadik
Модератор
Vadik's Avatar
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Join Date: 18.11.2002
Location: гражданин Москвы
Quote:
Originally Posted by trud View Post
а вот с покрывающимися индексами в 2012 сделали большую засаду, независимо от указанного списка полей выбирается RecId, неизвестно как бороться с этим
Назначать кластерным индекс по RecId
__________________
-ТСЯ или -ТЬСЯ ?
Old 13.10.2015, 21:54   #9  
Удвой Покуров is offline
Удвой Покуров
Участник
 
461 / 228 (8) ++++++
Join Date: 03.04.2011
Хорошо что ребята хоть разбираются. А то обычная проблема номер 1 при аудите: посмотрели код, не поняли что за язык, стали судорожно звонить менеджеру.
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 09:39.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.