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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2019, 18:44   #21  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от fed Посмотреть сообщение
Хотя это некоторый офтопик в этой теме, но проблема блокировок и дидлоков по LedgerBalancesTransDelta лечится простым удалением индекса по RecId. Просто ставишь в свойствах таблицы createRecIdIdx==No и проблема решается.
Лечится но не излечивается. Проблема там основная с удалением записей из дельты, а не с селектами/вставками. Игры с индексами (которые мы тоже проходили) облегчают положение дел. Но на тысячах (слово было вставлено не для красного словца, это действительно так) параллельных постоянно работающих разносок дельты (как складская, так и финансовая) постоянными вставками/ударениями моментально превращаются по физической структуре в хлам (околонулевое к-во записей, пара гигабайт размер, фрагментация индексов 99,99%), с которой сервер адекватно работать отказывается. Пробовали с кластерными индексами и без кластерных и раком и боком и вверх ногами. Пробовали перестроения индексов по шедулеру. Но онлайн перестроение при такой нагрузке ничего не исправляет, офлайн исправляет, но при этом само всё лочит. Настоящие темповые таблицы проблемы не облегчают, а именно решают.
За это сообщение автора поблагодарили: AlGol (3), trud (10), Logger (20), Raven Melancholic (5).
Старый 21.01.2019, 05:47   #22  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от mazzy Посмотреть сообщение
tablestr
fieldstr

если же речь идет о таблицах с первым символом #
Она и идет про такие таблицы с самого начала и от tablestr()/fieldstr() с ними пользы не больше чем от стеклянной бутылки при забивании гвоздей.

Цитата:
Сообщение от mazzy Посмотреть сообщение
то можно использовать таблицу SqlDictionary
Вариант, согласен. Минусы все те же - искать ID таблицы/полей придется по имени, передаваемому строковой константой со всеми сопутствующими радостями ловли ошибки в run-tume.

Цитата:
Сообщение от mazzy Посмотреть сообщение
или Dictionary.TableCnt2Id()
Может все-таки tableName2Id() ?

Цитата:
Сообщение от mazzy Посмотреть сообщение
а для работы с DictTable, вообще говоря, достаточно ID таблицы.
Спасибо, кэп
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 21.01.2019 в 05:50.
Старый 21.01.2019, 10:09   #23  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от db Посмотреть сообщение
Как обращаться к такой таблице в коде? Первый вариант уже сказали - табличный мап и инициализация через MakeRecord. Второй вариант - дублировать таблицу чтобы FieildId были такие как в таблице с решетом и то-же инициализация через MakeRecord.
Это понятно, когда уже есть каким-то образом полученный TableId. Насколько я понял, TasmanianDevil больше интересуется не тем, как делать выборку, когда уже имеем запись, а то, что происходит в:
Код:
mInventSumDeltaKeyMap::tmpTableInit();
Код:
trecord::init(this.getBalanceDeltaTableId());
В первую очередь getBalanceDeltaTableId
То есть, существует ли вариант получения TableId таблицы таким образом, чтобы сохранялись перекрестные ссылки, чтобы про изменения например наименования сообщал компилятор при компиляции перед релизом, а не разъяренный пользователь после релиза.
А мне интересен технический момент: если я в InventUpd_* буду использовать эти временные InventSumDelta, то смогу ли обратиться именно к этому конкретному экземпляру временной таблицы в InventOnHand?
Ясно, что если этот подход помогает, то с чем-то можно смириться.
Старый 22.01.2019, 20:31   #24  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Никаких чудес. За всеми этими обертками tablename2id() и dictTable.makeRecord(). С учетом неявных предположений об одинаковых FieldId в таблицах с решеткой и без, отсутствие перекрестных ссылок на инициализацию вообще за грех можно не считать.

X++:
tablename2id('#mInventSumDeltaKeyTmp');
Старый 23.01.2019, 09:42   #25  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А мне интересен технический момент: если я в InventUpd_* буду использовать эти временные InventSumDelta, то смогу ли обратиться именно к этому конкретному экземпляру временной таблицы в InventOnHand?
Ясно, что если этот подход помогает, то с чем-то можно смириться.
Экземпляры темповой таблицы с решетом существуют в разрезе сессий SQL сервера. AOS может произвольно брать такие сессии из своего пула коннектов, но если идет транзакция, то (что логично) переключения сессий SQL на ходу для одной сессии аксапты не происходит. Дельты имеют смысл только внутри транзакций, так что ответ да, обратиться сможешь. Возможно для исключения каких либо экстремальных случаев использования функциональности дельт стоит предусмотреть проверку на appl.ttsLevel() перед обращениям к таким таблицам. У себя этого не делали, но код на предмет что всё в транзакциях, просматривал. Возможно что то и обернул в транзакции, уже не вспомню. Полет нормальный около 5 лет.
Старый 23.01.2019, 10:34   #26  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от db Посмотреть сообщение
Возможно для исключения каких либо экстремальных случаев использования функциональности дельт стоит предусмотреть проверку на appl.ttsLevel() перед обращениям к таким таблицам.
Тут даже проще можно, есть метод для проверки того, нужно ли использовать дельты для номенклатуры:
X++:
InventUpdateOnhandGlobal::mustAddInventSumDeltaOnhand(itemId)
Спасибо за информацию, поэкспериментирую на кошках.
Теги
dispose, inventsumdelta, ledgerbalancestransdelta, tempdb

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance - Analyzing key SQL Server configuration and database settings Blog bot DAX Blogs 0 28.09.2015 14:11
Какое оптимальное сочетание версий SQL и AX2009 ? AXcons DAX: Администрирование 14 02.09.2015 11:27
emeadaxsupport: AX Performance Troubleshooting Checklist Part 1A [Introduction and SQL Configuration] Blog bot DAX Blogs 0 05.09.2014 21:11
zakharov: Внедряем AX2009. Поиск "тяжелых" запросов используя Microsoft SQL Server Activity Monitor Blog bot DAX Blogs 5 22.08.2013 11:18
Помогите с выбором версии SQL Server для Ax2009 Predator DAX: Администрирование 9 02.02.2010 21:38

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

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

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