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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2018, 14:15   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
AX2009 TraceParcer issue
Всем привет,

AX2009

может кто-то сталкивался с ошибкой при попытке импортитовать лог в TraceParcer?

Нажмите на изображение для увеличения
Название: 30.03.png
Просмотров: 517
Размер:	19.9 Кб
ID:	11873

Название: 30.03-1.png
Просмотров: 1353

Размер: 22.9 Кб

пробовал сделать то же самое на совершенно независимом энве - аналогичная ошибка.

Последний раз редактировалось DSPIC; 30.03.2018 в 14:17.
Старый 30.03.2018, 15:47   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Багу не встречал.

Идеи:
1. Возможно загрузка полагается на порядок следования полей в базе и загрузка значения происходит не в тот столбец. Сиквел пытается автоматически сконвертировать значение и происходит переполнение.
Что можно сделать - посмотреть какой SQL запрос идет. Угадать правильный порядок столбцов. пересоздать табличку с нужным порядком следования столбцов в базе.

2. Может формат базы не тот ? Опять можно потрассировать запросы и попытаться угадать какой должен быть правильным.
Старый 30.03.2018, 19:11   #3  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Спасибо, но похоже, дело не в этом. Поигравшись, заметил, что ошибка возникает уже после загрузки трейса в DB и появляется каждый раз когда, скажем, переключаешся между сессиями юзеров, т.е. при перестроении дерава колл стека. Колл стек, тем не менее, отрисовывается, но время исполнения выполнения кода кривое, прописывается значение, как максимально-возможное для типа int(или long-int), что коррелирует с сообщением об ошибке. Т.е. ошибка, похоже чисто на UI.
Старый 30.03.2018, 22:40   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Да он вообще немного глючный
Тормозит создание буфера.
Старый 04.04.2018, 12:07   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
У меня вот такой был. Microsoft Dynamics AX Trace Parser.rar
Старый 03.01.2020, 18:46   #6  
Sergicc is offline
Sergicc
Участник
 
25 / 10 (1) +
Регистрация: 24.08.2004
Trace Parser DAX2009
скиньте пжл дистр. парсера если не трудно не могу найти нигде.спс
Старый 09.02.2023, 12:27   #7  
alexkrut is offline
alexkrut
Участник
 
20 / 33 (2) +++
Регистрация: 19.12.2011
Привет!

Понимаю, что форум теперь больше экономический, чем про аксапту, но рискну спросить.

Столкнулся с той же проблемой что и топикстартер, причем на двух разных аксаптах (2009 и 2012) и двух разных трейспарсерах соответственно.

Исследования показали, что сами трейспарсеры не при чем (трейсы собранные на моей личной виртуалке, открываются без проблем что в 2012, что в 2009).

Сама проблема в записи (или интерпретации) sql запросов (если записывать в трейс только X++) все работает.
А конкретно не работает интерпретация AxPrepDuration:

Запускаю запись трейсов вот так:

X++:
SysTraceControl::startClientTrace( @"C:\temp\trace.etl", 
                                        #AXTRACE_DEFAULT_BUFFER_SIZE,
                                        #AXTRACE_DEFAULT_MINBUFFERS,
                                        #AXTRACE_DEFUALT_MAXBUFFERS,
                                        0x34);
    
    select * from inventTable;

    info( inventTable.ItemId );
    
    SysTraceControl::stopClientTrace();
Получаю вот такое в etl (сконвертил etl в xml):

PHP код:
<Data Name="seqNum">318586</Data>
<
Data Name="AxServerName">...</Data>
<
Data Name="AxUserName">...</Data>
<
Data Name="AxSessionId">3</Data>
<
Data Name="AxRC">1</Data>
<
Data Name="AxConDBSpid">59</Data>
<
Data Name="AxSqlStmt">SELECT T1.ITEMID,T1.ITEMTYPE,T1.PURCHMODEL,T1.HEIGHT,T1.WIDTH,T1.SALESMODEL,T1.COSTGROUPID,T1.REQGROUPID,T1.EPCMANAGER,T1.PRIMARYVENDORID,T1.NETWEIGHT,T1.DEPTH,T1.UNITVOLUME,T1.BOMUNITID,T1.ITEMPRICETOLERANCEGROUPID,T1.DENSITY,T1.COSTMODEL,T1.USEALTITEMID,T1.ALTITEMID,T1.MATCHINGPOLICY,T1.INTRACODE,T1.PRODFLUSHINGPRINCIP,T1.MINIMUMPALLETQUANTITY,T1.PBAITEMAUTOGENERATED,T1.WMSARRIVALHANDLINGTIME,T1.BOMMANUALRECEIPT,T1.PHANTOM,T1.INTRAUNIT,T1.BOMLEVEL,T1.BATCHNUMGROUPID,T1.AUTOREPORTFINISHED,T1.ORIGCOUNTRYREGIONID,T1.STATISTICSFACTOR,T1.ALTCONFIGID,T1.STANDARDCONFIGID,T1.PRODPOOLID,T1.PROPERTYID,T1.ABCTIEUP,T1.ABCREVENUE,T1.ABCVALUE,T1.ABCCONTRIBUTIONMARGIN,T1.COMMISSIONGROUPID,T1.SALESPERCENTMARKUP,T1.SALESCONTRIBUTIONRATIO,T1.SALESPRICEMODELBASIC,T1.NAMEALIAS,T1.PRODGROUPID,T1.PROJCATEGORYID,T1.GROSSDEPTH,T1.GROSSWIDTH,T1.GROSSHEIGHT,T1.STANDARDPALLETQUANTITY,T1.QTYPERLAYER,T1.SORTCODE,T1.SERIALNUMGROUPID,T1.ITEMBUYERGROUPID,T1.TAXPACKAGINGQTY,T1.WMSPALLETTYPEID,T1.ORIGSTATEID,T1.WMSPICKINGQTYTIME,T1.TARAWEIGHT,T1.PACKAGINGGROUPID,T1.SCRAPVAR,T1.SCRAPCONST,T1.STANDARDINVENTCOLORID,T1.STANDARDINVENTSIZEID,T1.ITEMDIMCOSTPRICE,T1.ALTINVENTSIZEID,T1.ALTINVENTCOLORID,T1.FORECASTDMPINCLUDE,T1.PRODUCT,T1.PALLETTAGGING,T1.ITEMTAGGINGLEVEL,T1.DEFAULTDIMENSION,T1.BOMCALCGROUPID,T1.PBAITEMCONFIGURABLE,T1.PBAINVENTITEMGROUPID,T1.PBAHIDEDIALOG,T1.PBAHIDEAPPROVAL,T1.PBAAUTOSTART,T1.PBAMANDATORYCONFIG,T1.PDSCWWMSSTANDARDPALLETQTY,T1.PDSCWWMSMINIMUMPALLETQTY,T1.PDSCWWMSQTYPERLAYER,T1.ALTINVENTSTYLEID,T1.BATCHMERGEDATECALCULATIONMETHOD,T1.PDSBASEATTRIBUTEID,T1.PDSBESTBEFORE,T1.PDSFREIGHTALLOCATIONGROUPID,T1.PDSITEMREBATEGROUPID,T1.PDSPOTENCYATTRIBRECORDING,T1.PDSSHELFADVICE,T1.PDSSHELFLIFE,T1.PDSTARGETFACTOR,T1.PDSVENDORCHECKITEM,T1.PMFPLANNINGITEMID,T1.PMFPRODUCTTYPE,T1.PMFYIELDPCT,T1.STANDARDINVENTSTYLEID,T1.MODIFIEDDATETIME,T1.DEL_MODIFIEDTIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.DEL_CREATEDTIME,T1.CREATEDBY,T1.RECVERSION,T1.PARTITION,T1.RECID FROM INVENTTABLE T1 WHERE ((PARTITION=?) AND (DATAAREAID=?))</Data>
<
Data Name="AxDuration">7203</Data>
<
Data Name="AxPrepDuration">0</Data
Как можно видеть, AxPrepDuration = 0
Но если загрузить этот трейс в трейс парсер, получаем следующее:

Prep Time (ms) : -922,337,203,685,478.00 (и так реально лежит в базе трейспарсера для этой строки трейса)

Выглядит так, будто в процессе импорта 0 из AxPrepDuration зачем-то интерпретируется, как минимальное значение long.

Но при этом трейсы, которые нормально работают тоже содержат в себе AxPrepDuration = 0 но загружаются без проблем.

Может у кого-то возникнут идеи, хотябы в каком направлении копать?

Сервер 2019
SQL 2017
билд 2012 - 6.3.6000.151
билд 2009 - 5.0.1500.3761
Старый 09.02.2023, 14:03   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если мне не изменяет память, загрузку в базу вы делаете в самом трейспарсере.
А он представляет из себя сборку .net
Можно посмотреть исходник ILSpy-ем. Или может даже они где-то есть на гитхабе.
Посмотрите это место в коде. Возможно там некорректно работа с типами идет.
Старый 09.02.2023, 15:35   #9  
Masel is offline
Masel
Участник
 
39 / 537 (18) +++++++
Регистрация: 19.09.2007
А если собрать через perfmon.exe? Я просто только так и собираю. Там еще есть проблема с версией ОС. На 2019 не работает. Вроде максимум на 2016. То есть файл формируется, но в парсер грузится с ошибкой на 2019.
За это сообщение автора поблагодарили: Logger (3).
Старый 09.02.2023, 15:48   #10  
alexkrut is offline
alexkrut
Участник
 
20 / 33 (2) +++
Регистрация: 19.12.2011
Цитата:
Сообщение от Masel Посмотреть сообщение
А если собрать через perfmon.exe?
Через него тоже пробовал, с аналогичным результатом. А можете подсказать, с какими настройками вы его запускаете? (Keywords для провайдера, размер буфера и т д)

И по поводу версии ос где-то были статьи и\или официальный анонс, почему именно не будет работать с 2019?

Вот здесь тоже люди встречались с подобным и пишут, что может случиться на версиях сервера младше 2019

https://community.dynamics.com/ax/f/...flow-exception
Старый 09.02.2023, 20:04   #11  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Названия полей там интересные упомянуты

Columns : inclusivedurationnano , databasedurationnano , binddurationnano, exclusivedurationnano , prepdurationnano , rowfetchdurationnano

Может там счетчики старта завершения длительности в тиках стоят. И в более свежих виндах (более свежих версиях .net) они приобретают более высокие значения ? Тикают с большей точностью чем на старых виндах и быстрее достигают значений приводящих к переполнению.

Обычно разные счетчики обнуляются с перезагрузкой винды.
Попробуйте сервак перезагрузить и снова трейс собрать и загрузить.

Реально я не исследовал - это только поверхностные предположения.
Старый 10.02.2023, 19:30   #12  
Masel is offline
Masel
Участник
 
39 / 537 (18) +++++++
Регистрация: 19.09.2007
Вставил скрин с настройками. Не берусь сказать, что это какие-то оптимальные настройки, но у меня так работает. Если не успевает писать, можно наверное увеличивать параметры.
По поводу статей. Когда была такая проблема, где-то находил, что версия ОС поддерживается какая-то древняя по нынешним меркам. Там по моему и 2016 не поддерживается. Но есть практический опыт, на 2019 не работает. Сносишь 2019 ставишь 2016 и работает. Несколько раз такое наблюдал. Почему это так и как направить 2019 я не разбирался.
Изображения
 
За это сообщение автора поблагодарили: Logger (5).
Старый 06.04.2023, 03:05   #13  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
298 / 866 (29) +++++++
Регистрация: 23.10.2012
Привет.
При регистрации новой БД приложение выдает ошибку. Для меня является загадкой причина по которой не был сделан динамический вывод информации о причине ошибки, тем не менее... после кастомизации Microsoft.Dynamics.AX.Tracing.Data.dll пришло понимание, что текст ошибки звучит как: 'PK__TraceLin__9FC961DF25869641' is not a constraint.
Удалось найти проблемный запрос к БД:
X++:
ALTER TABLE [dbo].[TraceLines] DROP CONSTRAINT [PK__TraceLin__9FC961DF25869641]
Понятное дело, что "игра называется угадай, а что в БД на самом деле", а там "PK__TraceLin__9FC961DF4E1C95DE".
Мой вопрос - насколько это обыденная проблема при работе с данным ПО? У меня может дитрибутив "битый"?
Миниатюры
Нажмите на изображение для увеличения
Название: traceparserdblog.jpg
Просмотров: 42
Размер:	136.3 Кб
ID:	13557  
Изображения
 
Старый 06.04.2023, 09:20   #14  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Мой вопрос - насколько это обыденная проблема при работе с данным ПО? У меня может дитрибутив "битый"?
Еще бы версию Trace Parser-а привести для понимания...
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
При регистрации новой БД приложение выдает ошибку: 'PK__TraceLin__9FC961DF25869641' is not a constraint. В БД на самом деле "PK__TraceLin__9FC961DF4E1C95DE".
Не встречал при регистрации новой БД Trace Parser ошибок, кроме связанных с отсутствием права create database на сервере. В целом же после ковыряний с D365FO и ее глючной синхронизацией я лично решил для себя, что если приложение хочет дропнуть в базе что-то, чего там нет, то проще дать ему это дропнуть: создать недостающий constraint с нужным именем (любого содержания), или поле, или индекс, или что там приложение не может найти, но хочет изничтожить. Пусть дропнет и не мотает нервы
Старый 06.04.2023, 10:02   #15  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
298 / 866 (29) +++++++
Регистрация: 23.10.2012
Совсем забыл...речь идет о Version 6.0.947.9033.

Да, создать нужный объект мне тоже хотелось и это было бы решением, если бы (много бы) утилита умела валидировать целостность БД и продолжать выполнение с момента предыдущего прерывания. У нее 2 состояния - создать новую БД или использовать существующую.

Проблемы, на самом деле две:
Первая - в коде исполняемого файла, в функции Microsoft.Dynamics.AX.Tracing.TraceParser.Presentation.DatabaseRegister.CollectDatabaseRegistrationConnectionString. Изображение прикрепил, стрелками синего цвета отмечен путь в случае когда БД есть, серого - БД нет.
Вторая - можно вызвать "Microsoft.Dynamics.AX.Tracing.Data.DatabaseHelper.CreateDatabase" через то же консольное приложение, но там "затык" уже в самих запросах к БД. Первым запросом идет "create database" - снова "свалится", БД же есть к этому моменту.

Вижу 2.5 путей решения:
1. Разобраться с генерацией названия PK;
2. Видоизменить проблемный код в библиотеке;
2.5. Запустить скрипты по подготовке БД самостоятельно.
Понятное дело, что 1-ый вариант вызывает интерес. Для эксперимента взял другую машину (SQL другой, ОС другая) результат - "PK__TraceLin__9FC961DFECC085B4". Документации официальной на тему правил генерации наименований не вижу, может кто-то владеет такой информацией?
Миниатюры
Нажмите на изображение для увеличения
Название: traceparsercodeswitch.jpg
Просмотров: 35
Размер:	173.6 Кб
ID:	13558  

Последний раз редактировалось Товарищ ♂uatr; 06.04.2023 в 11:54.
Старый 06.04.2023, 22:45   #16  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Masel Посмотреть сообщение
По поводу статей. Когда была такая проблема, где-то находил, что версия ОС поддерживается какая-то древняя по нынешним меркам. Там по моему и 2016 не поддерживается. Но есть практический опыт, на 2019 не работает. Сносишь 2019 ставишь 2016 и работает. Несколько раз такое наблюдал. Почему это так и как направить 2019 я не разбирался.
А вы не пробовали запускать приложение в режиме совместимости с предыдущими версиями Windows ? Может поможет снизить частоту возникновения проблем. Аос можно как консольное приложение запускать и прописать для него соответствующую совместимость.
Старый 06.04.2023, 22:42   #17  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А вы обратили внимание что везде повторяется одна "магическая" константа "-9223372036854775808"

И если погуглить
https://www.google.com/search?q="-9223372036854775808"

То легко увидеть что это 2^63 со знаком минус. Явно было какое то переполнение.
А судя по тому что описывают тут
https://stackoverflow.com/questions/...f-a-2d-array-a

https://github.com/numpy/numpy/issues/13101

Такие числа получаются если вещественный Nan приравнять целому числу. Тогда получается MinInt соответствующей размерности (для int64 будет -2^63 т.е. наш случай)
Там явно где то при сборе трейсов идет ошибка.

Думаю, что раз трейс смог закачаться в SQL базу то можно одним SQL запросом перебить эту магическую константу на 0 и тогда с трейсом можно будет обращаться.
Судя по скрину там был вызов ConPeek() (если мне не изменяет память, то qpeek это ConPeek()) - он не должен очень много занимать. Если обнулить, то погрешность вероятно будет не слишком большой.

Последний раз редактировалось Logger; 06.04.2023 в 22:47.
Старый 06.04.2023, 23:04   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А возможно что там на входе 64-битный счетчик типа аксаптовского \Classes\WinAPI\getTickCount64
(System.DateTime::get_Now())

который считает некие тики. Если это тики процессора, то переполняться может достаточно часто (кстати, если не ошибаюсь, то размер "тик"-а для System.DateTime зависит от версии .net - отсюда и зависимость частоты возникновения глюков от версии винды. Выше версия винды - более мелкий тик - чаще переполняется счетчик).

И возможно что значение этого счетчика трактуется в коде как беззнаковое целое, а используется знаковое целое и при переходе через максимальное целое нормально не обрабатывается при этом.
Получается что если TickStart был положительным целым, а TickFinish перемахнул в область отрицательных, то разница их по модулю всегда будет больше или равная чем 2^63 А само число будет всегда меньше или равно чем -2^63
Но больше не влезает в размерность числа, вот мы и получаем всегда -2^63

Если эти предположения верны, то можно попробовать пофиксить приложение, чтобы корректно обрабатывало такие случаи (где бы еще взять исходники. Хотя при определенном желании можно дизассемблировать и пересобрать).

Ну или заставить все это работать с меньше точностью (задействовать более старую версию дотнет или запустить в режиме совместимости со старой версией винды)

Последний раз редактировалось Logger; 06.04.2023 в 23:24.
Старый 08.04.2023, 03:21   #19  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
298 / 866 (29) +++++++
Регистрация: 23.10.2012
Спасибо, словно на съемках Санта Барбара побывал - там действительно проблема с преобразованием...
...у винды есть вот такая функция QueryPerformanceFrequency
У утилиты есть конвертер "QueryPerfCounter" с функцией:
X++:
public static long ConvertQPFTimeToTicks(ulong QPFTime)
{
	if (!initialized)
	{
		if (!NativeMethods.QueryPerformanceFrequency(out mFrequency))
		{
			throw new InvalidOperationException();
		}
		initialized = true;
	}
	return (long)((double)QPFTime / (double)mFrequency * (double)multiplier);
}
Где для mFrequency может быть инициализирована значением по умолчанию из той самой функции. История на этом могла бы и закончиться (ну да, выдавало бы оно разные результаты на разных машинах), если бы не лог трассировки в комбинации с этой строкой "QueryPerfCounter.Frequency = e.Properties.TryGetValue<long>("PerfFreq");" желающей видеть данное свойство у каждого события лога.
Только не все логи события "XppUtilFuncEvent" (согласно статистике) желают заполнять данную информацию. Поэтому получаем mFrequency равное 0, а далее "силу бесконечности".
Миниатюры
Нажмите на изображение для увеличения
Название: parserdebug.jpg
Просмотров: 41
Размер:	280.4 Кб
ID:	13560  
Старый 08.04.2023, 11:00   #20  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Судя по коду значение должно быть одинаково у всех замеров. Т. Е. MinInt64 у всех. А оно у одних так у других сяк.
Поэтому мне все же кажется что дело в переполнении.
Теги
ax2009, trace parser

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: KB3163813 CU12 Known Issue – Incorrect Posting amounts – Shipment Packing slip posting Blog bot DAX Blogs 0 13.03.2017 18:11
dynamicscpm: Management Reporter bugs now available in LCS Issue Search Blog bot DAX Blogs 0 13.06.2015 00:14
Странное поведение при закрытии склада-ошибка в коде? Aquarius DAX: Программирование 11 27.06.2013 13:37
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:37.