|
![]() |
#1 |
Модератор
|
Цитата:
![]() Цитата:
Но очень хочется, чтоб это оказалось из-за блокировок
Я бы прислушался к совету Wamr Если все-таки очень хочется найти "горячую" номенклатуру, можно попробовать такой "ход конем": - настраиваем поголовный мониторинг длинных запросов всем пользователям - включаем на AOS-е опцию internal=comments (в 3.0 работает, как в других версиях - не знаю). Теперь запрос сохранится со значениями литералов (в комментариях) - собираем эту статистику какое-то время - далее анализируем с группировкой (приводим текст запроса к varchar и группируем). Так как запрос "тяжелый", желательно делать это не на работающей системе, а выгрузить SYSTRACETABLESQL в отдельную БД. Еще лучше - на выделенный сервер. Еще лучше - дополнительно обработать табличку, добавив хэш по тексту запроса. Я таким образом строил куб на основе SYSTRACETABLESQL Но все равно непонятно (с), что это даст. Рискну предположить, что "горячей" окажется наиболее часто продаваемая номенклатура. Предложим пореже продавать? Не оценят ![]()
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: Logger (6), Lucky13 (2). |
![]() |
#2 |
Участник
|
Цитата:
Сообщение от Vadik
![]() Сами по себе блокировки - не абсолютное зло, как многие считают, а одно из средств обеспечения целостности данных в системе, поддерживающей работу нескольких конкурентных пользователей. И являться причиной неверных остатков в нормально спроектированной системе (а стандартную логику AX в области управления запасами я считатаю нормально спроектированной
![]() Долго подбирал данные, но смог подобрать. Правда транзакции там ни причем были. А потом мне нужно это найти не на стандарте. Прилага на 80% модифицирована по формуле mazzy.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
1) Создаём новую номенклатуру new активны склад и ГТД
2) Создаём закупку 3) Создаём строку закупки new 2 шт (скл1 + гтд1) и 4) ещё одну строку закупки new 3 шт (скл1 + гтд2) 5) Разносим отборочную накладную 6) создаём журнал перенос (резервирование автоматическое) 7) Создаём строку журнала new 6 шт скл1->скл2. Сохраняем. 8) Смотрим проводки -2шт скл1 -> скл2 гтд1 -> гтд1 -3 шт скл1 -> скл2 гтд2 -> гтд2 -1шт скл1 -> скл2 9) уменьшаем количество по строке до 5 шт сохраняем, смотрим -2шт скл1 -> скл2 гтд1 -> гтд1 -2шт скл1 -> скл2 гтд1 -> гтд1 -1шт скл1 -> скл2 гтд1 -> ?(пусто) Ну т.е. вот так см картинку
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. Последний раз редактировалось miklenew; 12.02.2009 в 23:37. |
|
![]() |
#5 |
MCITP
|
![]() Цитата:
- откуда взялся странный вывод о том, что причина в блокировках? я бы сказал, что проблема в некорректной работе механизма авторезервирования, если всё так действительно происходит. Надо банально его протрейсить и найти баг.... - вы выше говорили что у вас "остатки расходяться с проводками", а здесь просто "испортилась" приходная проводка (InventTrans), при этом остатки у вас разве "разошлись" (InventSum)?
__________________
Zhirenkov Vitaly |
|
![]() |
#6 |
Участник
|
Да нет. Одно с другим не связано.
Там я вывернулся. Придумал выход. Просто Vadim написал, что Цитата:
Не стоит доверять системе на 100%. Всякое бывает. A logger попросил пример. Это пример с блокировками никак не связан. Просто тема немного ушла.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
![]() |
#7 |
Участник
|
Ну я так и думал. Ваше исходное сообщение можно было понять словно из-за блокировок развалились InventSum и InventTrans. Как видно из примера ничего похожего и близко нет.
|
|
![]() |
#8 |
Участник
|
Процитирую сам себя
Та была совсем другая история, она давно закрыта.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
![]() |
#9 |
Участник
|
Цитата:
Как обнаружил - накладывал фильтр по таблице по полю modifiedDate фильтр такой X++: ...Addrange(...).value(date2strXpp(systemDateGet())); AND (MODIFIEDDATE=:IN2/*1900/1/1*/) а datasource(1).tostring() выдал строку SELECT * FROM VendTable WHERE (((modifiedDate = TO_DATE('2009-02-27 00:00:00','YYYY-MM-DD HH24:MI:SS')))) Реально же вернулась нужная строка. Так что получается что для определенных значений параметров логирование SQL-запросов может показать неверную информацию. |
|
![]() |
#10 |
MCITP
|
![]()
ошибка update_recordset
![]() Обратите внимание, что лучше таки использовать совместно с NOCURSORREUSE, т.к. иначе рискуете отловить не все запросы: Цитата:
Сообщение от Documentation
∙ -Internal=Comments
∙ This option will insert value of bind variables as comment into the generated SQL statement; Therefore, this option will cause insertion of an odd number of the character ‘ in a STR field to fail. ∙ -Internal=NoCursorReuse ∙ This option will force Axapta not to reuse internal database cursors; therefore, if you want to examine the value of bind variable for all traced SQL statements you must use this option in connection with the ‘–internal = Comments’. Странно, не сталкивался... Возможно причина в системных полях (MODIFIEDDATE)? Можете вложить примерчик?
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: Logger (1). |
Теги |
internal, блокировка, лог, поиск ошибок, полезное |
|
|