|
![]() |
#1 |
Участник
|
Если кратко, то он предложил:
1. Удалить таблицу InventDim 2. Во всех таблицах, где есть поле InventDimId, это поле удалить, и добавить по 3 новых (с ArraySize > 1 у всех) То есть в каждой таблице (на стороне SQL) будет вместо 1 поля 9 (или сколько там, я не посчитал) Чем мне не нравится такой подход: - Размер базы намного больше - В каждой таблице больше полей, поэтому больше постоянно тянется при запросах - Размер индексов больше, соответственно, размер базы больше и скорость меньше. т.д. P.S. Поздравляю с репутацией == 600! ![]() Я бы создал в соответствущей теме это, но пора бежать на развозку. |
|
![]() |
#2 |
Участник
|
Цитата:
Я и говорю - ужас какой-то (несмотря на мой плохой английский, понял таки правильно ![]() |
|
![]() |
#3 |
Участник
|
Вместо монстроидальных индексов получили монстроидальные планы запросов, когда join'ятся несколько таблиц, в каждой из которых - миллионы записей, из-за чего в конечном итоге возникает то тут, то там денормализация данных: рядом с inventDimId в транзакционных таблицах селится inventLocationId или другие поля из InventDim. Кроме того, если на каждой таблице проводок/строк журналов/строк заказов будут свои индексы, ими будет проще управлять, даже если они будут на sys-слое. Нужно ускорить выборку по какой-то таблице в каком-то разрезе - привинтил индекс, не нужно - отключил его, и пусть болтается в AOT'е. А так выходит, что одна таблица InventDim, пухнущая не по дням, а по часам, обрастает кучей индексов на все случаи жизни...
|
|
|
За это сообщение автора поблагодарили: Logger (4). |
![]() |
#4 |
Участник
|
Цитата:
Обратите внимание, что серийные номера и партии в стандартном функционале относятся к "селективным" (там метод такой есть). А вот ГТД забыли в этот метод включить ![]() Кроме того, обратите внимание, на отдельные запросы по селективным полям... А у ГТД опять же "забыли" сделать отдельные запросы. ![]() Сколько раз видел, что народ добавляет свои поля, похожие на ГТД и также не указывает "селективность"... Кроме того и ГТД нельзя в InventDim запихивать. В inventDim должны присутствовать только признаки, которые можно проинвентаризировать. "Миллионы записей в InventDim" - это ненормально. А если уж "так получилось", то не забывайте о стандартном функционале, который позволяет работать и с такими случаями. |
|
![]() |
#5 |
Модератор
|
Цитата:
![]() опять же - "бездумно".. какой функционал есть, такой и используем.. или предлагаешь свой написать?
__________________
-ТСЯ или -ТЬСЯ ? |
|
![]() |
#6 |
Участник
|
Цитата:
Но если идет фильтрация по селективному полю, то будут работать совсем другие запросы и совсем другие хинты. ![]() Не знаю. Все еще не знаю. Но идея Axapta Light по прежнему бурлит... Пока себя сдерживаю изо всех сил. |
|
![]() |
#7 |
Member
|
Цитата:
Сообщение от mazzy
...
"Миллионы записей в InventDim" - это ненормально. ... А селективность спасает только на определенных запросах. При раздутом другими аналитиками InventDim отбор проводок, которые относятся к определенному складу, например, превращается в трудоемкую задачу для сервера СУБД. В некоторых случаях можно пытаться решать некоторые проблемы с производительностью запросов путем дублирования склада или прочих нужных аналитик в транзакции. Но это требует существенной переделки логики и предельной аккуратности. Такой подход годится для эксклюзивных случаев, в которых производительность архи-критична.
__________________
С уважением, glibs® |
|
![]() |
#8 |
Модератор
|
Цитата:
Вполне вероятно, что показывать (и, возможно, фильтровать) номенклатурные аналитики требуется чаще, чем аналитики хранения (по крайней мере - в пользовательском интерфейсе). Если бы малой кровью удалось переписать INVENTDIMxxx макросы (в идеале - с удалением из запроса неиспользуемых таблиц), эффект на мой взгляд мог бы быть P.S. Ты посмотри на \Data Dictionary\Tables\InventSum\Methods\queryAddHint, \Data Dictionary\Tables\InventSum\Methods\queryAddHintFromCaller Вот где ужас-то ![]() P.P.S. Хотя одними макросами тут конечно не обойдется..
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: Logger (3). |
![]() |
#9 |
Участник
|
Цитата:
Сообщение от Vadik
![]() Зачем сразу "ужас". Это не ужас. Это идея, причем здравая - INVENTDIM при использовании палет или серийных номеров и есть настоящий монстр, постоянно join-ящийся к проводочным таблицам. И на нем как раз монстроидальный составной индекс DimIdx.
Вполне вероятно, что показывать (и, возможно, фильтровать) номенклатурные аналитики требуется чаще, чем аналитики хранения (по крайней мере - в пользовательском интерфейсе). Если бы малой кровью удалось переписать INVENTDIMxxx макросы (в идеале - с удалением из запроса неиспользуемых таблиц), эффект на мой взгляд мог бы быть См. например, \Classes\InventSumFinancial\setValueQty Цитата:
![]() Вообще говоря, ты привел методы, которые используют метод \Data Dictionary\Tables\InventDimParm\Methods\isFlagSelective посмотри чем он используется при помощи перекрестных ссылок. Этот метод определяет поля, поиск по которым дает очень селективную выборку. В зависимости от этого метода в Аксапте работает очень много кода для "оптимизации". Попробуй сделать минимальную правку - добавь ГТД в метод isFlagSelective. Обрати внимание насколько изменилось поведение системы ![]() А вообще говоря, согласен с тем, что сам InventDim - это результат программистского подхода: щас мы наваяем универсальный механизм, а пользователи его будут настраивать. Но перенести этот универсальный механизм в array - это не выход. Это тот же самый программистский подход - вид сбоку ![]() Надо перерабатывать саму идеологию. По крайней мере есть различие между номенклатурными аналитиками (комбинаций таких аналитик много, индексы селективные) и аналитиками хранения (комбинаций таких относительно немного). |
|
![]() |
#10 |
Участник
|
Слава богу,
Цитата:
Сообщение от mazzy
разработчик
|
|
![]() |
#11 |
Модератор
|
Цитата:
Сообщение от mazzy
![]() Дык, они и так разными запросами join'ятся.
.. посмотри чем он используется при помощи перекрестных ссылок. Этот метод определяет поля, поиск по которым дает очень селективную выборку. В зависимости от этого метода в Аксапте работает очень много кода для "оптимизации". См. например, \Classes\InventSumFinancial\setValueQty .. если идет фильтрация по селективному полю, то будут работать совсем другие запросы и совсем другие хинты ![]() Мне кажется, это тупиковое направление. Особенно если учитывать возможность добавления новых "селективных" аналитик. Как например должна выглядеть логика в случае указания двух "селективных" аналитик - выбирать "наиболее селективную"? ![]() А оптимизатор СУБД на что придуман? За него ведь "уже уплочено".. Цитата:
Попробуй сделать минимальную правку - добавь ГТД в метод isFlagSelective. Обрати внимание насколько изменилось поведение системы
![]() ![]() Цитата:
А вообще говоря, согласен с тем, что сам InventDim - это результат программистского подхода: щас мы наваяем универсальный механизм, а пользователи его будут настраивать.
![]() Идея универсального механизма хорошая, но механизм пора чуток обновить с учетом того, что самих аналитик и их комбинаций чуть больше, чем задумывалось на этапе проектирования Цитата:
Но перенести этот универсальный механизм в array - это не выход. Это тот же самый программистский подход - вид сбоку
![]() Но не беда. Зато - идет мыслительный процесс ![]() Цитата:
Надо перерабатывать саму идеологию.
По крайней мере есть различие между номенклатурными аналитиками (комбинаций таких аналитик много, индексы селективные) и аналитиками хранения (комбинаций таких относительно немного) ![]() Разве что с тем, что комбинаций номенклатурных аналитик больше, не совсем согласен. It depends
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
![]() |
#12 |
Участник
|
Так. Я кажется выразился невнятно.
Ужас не в предлагаемой реализации. Ужас состоит в том, что чел предлагает поменять шило на мыло. При этом полностью отказавышись от совместимости с предыдущими версиями и, очень похоже, не разобравшись в предмете. Совсем как некоторые Майкрософты, партнеры или некоторые клиенты, которые переписывают Аксапту под девизом "мы сейчас за две недели не коленке сбацаем". Причем они уверены, что сбацают гораздо лучше, чем предшественники. Теперь к обсуждению: Цитата:
Сообщение от glibs
![]() Если использовать WMS (даже без ГТД) — вполне реально. Партии и серийные номера раздувают InventDim сильно. В производстве это особенно актуально (там партии используются частенько, серийные номера иногда).
А селективность спасает только на определенных запросах. При раздутом другими аналитиками InventDim отбор проводок, которые относятся к определенному складу, например, превращается в трудоемкую задачу для сервера СУБД. Автор должен был либо проанализировать что уже сделано и как можно улучшить с сохранением совместимости. Либо проанализировать свое предложение - не станет ли "спасительных опеределенных запросов" меньше. Я не спорю. В свое время писал Добавление аналитики (и другие темы) и сейчас повторю: Аксапта работает с нормальной производительностью при условии что InventDim существенно меньше, чем InventTrans. Большой InventDim - зло. Аксиома. НО: во многих российских внедрениях проблемы возникают не из-за WMS, партий и серийных номеров. А из-за неправильно реализованного ГТД. Кроме того, народ добавляет складские аналитики, беря за образец ГТД, и делает это неправильно. Одним только включением ГТД (и добавленных по его подобию аналитик) в список селективных полей можно решить проблемы производительности в 60-80% внедрений. (Vadik правильно напомнил об индексе по ГТД. Это само собой разумеется) Еще раз повторю: согласен, большой InventDim - зло. Но разработчики стандартной аксапты об этом зле хоть как-то подумали, а автор "универсального" предложения - нет. Именно в этом заключается "ужас", на мой взгляд. Цитата:
В некоторых случаях можно пытаться решать некоторые проблемы с производительностью запросов путем дублирования склада или прочих нужных аналитик в транзакции. Но это требует существенной переделки логики и предельной аккуратности. Такой подход годится для эксклюзивных случаев, в которых производительность архи-критична.
Я более, чем уверен, что и ты, и Vadik, и несколько других человек реализуют этот способ корректно. И я более, чем уверен, что у большинства последователей этого совета будут проблемы с целостностью. Будь внимателен и осторожен. Предложенный тобой способ может быть и принесет выигрыш, но чреват массой засад и потерей целостности. Поэтому я бы не рекомендовал так делать пока разработчик не будет уверен в своих действиях на 200%. Мы говорим о разных "ужасах" ![]() Я с тобой согласен вот в чем: согласен, что тупиковым является направление "универсальных", "платформенных", "программистских" механизмов, которые, по мнению разработчика, будут работать "при любых настройках". Даже сейчас можно четко выделить два вида совершенно разных по сути аналитик: номенклатурные и аналитики хранения. Согласен, что тупиковым является дальнейшее попытки запрячь "вола и трепетную лань" в одну упряжку. Но на мой взгляд, не менее тупиковой является и попытка сменить "шило на мыло", сменить одну универсальную таблицу на один универсальный массив. Цитата:
Да. ![]() К сожалению ![]() Цитата:
Пора не "чуток обновить" механизм, а разделить его на несколько механизмов согласно логике и смыслу (возможно не универсальных) Цитата:
И в InventSum, и в заказах, и в журналах, и в накладных, и в транзакциях... Везде. А таблицу InventDim он предлагает удалить. А вот тут ты скорее всего прав. Как всегда ![]() Чел предложил и предоставил замечательный повод пообсуждать задачу. Зря бурчу. Спасибо. Цитата:
Можно подробнее? |
|
![]() |
#13 |
Участник
|
К сожалению, нельзя.
Во-первых, еще ничего не известно толком, так как планирование и идеи архитектурных изменений сейчас находятся только в зародыше. Во-вторых, я думаю, что и так стою на грани дозволеного в плане распространения информации о будущих релизах, что является конфиденциальным. сорри. |
|
|
За это сообщение автора поблагодарили: mazzy (5), belugin (2). |
Теги |
axapta, faq, inventdim, производительность |
|
![]() |
||||
Тема | Ответов | |||
dynamicsmatters: Performance and Inventdim PII | 17 | |||
dynamicsmatters: Dynamics AX Base Data Model Part II | 0 | |||
Dynamics AX Geek: #InventDimJoin | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|