26.03.2008, 18:05 | #1 |
Участник
|
dynamicsmatters: Performance and InventDim
Источник: http://dynamicsmatters.blogspot.com/...inventdim.html
============== Источник: http://dynamicsmatters.blogspot.com/...inventdim.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору. |
|
26.03.2008, 18:23 | #2 |
Участник
|
ужас какой-то...
|
|
26.03.2008, 18:39 | #3 |
Участник
|
На самом деле, возможно и не ужас
В смысле, конкретно эта идея может и не очень. Но вообще в планах на 6ую версию проскакивал отказ от InventDim и вообще такого подхода. |
|
26.03.2008, 18:45 | #4 |
Участник
|
можно тогда попросить тебя изложить своими словами то, что он предложил?
может быть мой английский настолько плох, что я ни черта не понял? |
|
26.03.2008, 18:49 | #5 |
Участник
|
Если кратко, то он предложил:
1. Удалить таблицу InventDim 2. Во всех таблицах, где есть поле InventDimId, это поле удалить, и добавить по 3 новых (с ArraySize > 1 у всех) То есть в каждой таблице (на стороне SQL) будет вместо 1 поля 9 (или сколько там, я не посчитал) Чем мне не нравится такой подход: - Размер базы намного больше - В каждой таблице больше полей, поэтому больше постоянно тянется при запросах - Размер индексов больше, соответственно, размер базы больше и скорость меньше. т.д. P.S. Поздравляю с репутацией == 600! Я бы создал в соответствущей теме это, но пора бежать на развозку. |
|
26.03.2008, 18:55 | #6 |
Участник
|
Цитата:
Я и говорю - ужас какой-то (несмотря на мой плохой английский, понял таки правильно ) |
|
26.03.2008, 19:21 | #7 |
Участник
|
Вместо монстроидальных индексов получили монстроидальные планы запросов, когда join'ятся несколько таблиц, в каждой из которых - миллионы записей, из-за чего в конечном итоге возникает то тут, то там денормализация данных: рядом с inventDimId в транзакционных таблицах селится inventLocationId или другие поля из InventDim. Кроме того, если на каждой таблице проводок/строк журналов/строк заказов будут свои индексы, ими будет проще управлять, даже если они будут на sys-слое. Нужно ускорить выборку по какой-то таблице в каком-то разрезе - привинтил индекс, не нужно - отключил его, и пусть болтается в AOT'е. А так выходит, что одна таблица InventDim, пухнущая не по дням, а по часам, обрастает кучей индексов на все случаи жизни...
|
|
|
За это сообщение автора поблагодарили: Logger (4). |
26.03.2008, 20:04 | #8 |
Участник
|
Цитата:
Обратите внимание, что серийные номера и партии в стандартном функционале относятся к "селективным" (там метод такой есть). А вот ГТД забыли в этот метод включить Кроме того, обратите внимание, на отдельные запросы по селективным полям... А у ГТД опять же "забыли" сделать отдельные запросы. Сколько раз видел, что народ добавляет свои поля, похожие на ГТД и также не указывает "селективность"... Кроме того и ГТД нельзя в InventDim запихивать. В inventDim должны присутствовать только признаки, которые можно проинвентаризировать. "Миллионы записей в InventDim" - это ненормально. А если уж "так получилось", то не забывайте о стандартном функционале, который позволяет работать и с такими случаями. |
|
26.03.2008, 20:15 | #9 |
Модератор
|
Цитата:
Вполне вероятно, что показывать (и, возможно, фильтровать) номенклатурные аналитики требуется чаще, чем аналитики хранения (по крайней мере - в пользовательском интерфейсе). Если бы малой кровью удалось переписать INVENTDIMxxx макросы (в идеале - с удалением из запроса неиспользуемых таблиц), эффект на мой взгляд мог бы быть P.S. Ты посмотри на \Data Dictionary\Tables\InventSum\Methods\queryAddHint, \Data Dictionary\Tables\InventSum\Methods\queryAddHintFromCaller Вот где ужас-то P.P.S. Хотя одними макросами тут конечно не обойдется..
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: Logger (3). |
26.03.2008, 20:18 | #10 |
Модератор
|
Цитата:
опять же - "бездумно".. какой функционал есть, такой и используем.. или предлагаешь свой написать?
__________________
-ТСЯ или -ТЬСЯ ? |
|
26.03.2008, 20:31 | #11 |
Участник
|
Цитата:
Сообщение от Vadik
Зачем сразу "ужас". Это не ужас. Это идея, причем здравая - INVENTDIM при использовании палет или серийных номеров и есть настоящий монстр, постоянно join-ящийся к проводочным таблицам. И на нем как раз монстроидальный составной индекс DimIdx.
Вполне вероятно, что показывать (и, возможно, фильтровать) номенклатурные аналитики требуется чаще, чем аналитики хранения (по крайней мере - в пользовательском интерфейсе). Если бы малой кровью удалось переписать INVENTDIMxxx макросы (в идеале - с удалением из запроса неиспользуемых таблиц), эффект на мой взгляд мог бы быть См. например, \Classes\InventSumFinancial\setValueQty Цитата:
Вообще говоря, ты привел методы, которые используют метод \Data Dictionary\Tables\InventDimParm\Methods\isFlagSelective посмотри чем он используется при помощи перекрестных ссылок. Этот метод определяет поля, поиск по которым дает очень селективную выборку. В зависимости от этого метода в Аксапте работает очень много кода для "оптимизации". Попробуй сделать минимальную правку - добавь ГТД в метод isFlagSelective. Обрати внимание насколько изменилось поведение системы А вообще говоря, согласен с тем, что сам InventDim - это результат программистского подхода: щас мы наваяем универсальный механизм, а пользователи его будут настраивать. Но перенести этот универсальный механизм в array - это не выход. Это тот же самый программистский подход - вид сбоку Надо перерабатывать саму идеологию. По крайней мере есть различие между номенклатурными аналитиками (комбинаций таких аналитик много, индексы селективные) и аналитиками хранения (комбинаций таких относительно немного). |
|
26.03.2008, 20:34 | #12 |
Участник
|
Цитата:
Но если идет фильтрация по селективному полю, то будут работать совсем другие запросы и совсем другие хинты. Не знаю. Все еще не знаю. Но идея Axapta Light по прежнему бурлит... Пока себя сдерживаю изо всех сил. |
|
26.03.2008, 22:36 | #13 |
Member
|
Цитата:
Сообщение от mazzy
...
"Миллионы записей в InventDim" - это ненормально. ... А селективность спасает только на определенных запросах. При раздутом другими аналитиками InventDim отбор проводок, которые относятся к определенному складу, например, превращается в трудоемкую задачу для сервера СУБД. В некоторых случаях можно пытаться решать некоторые проблемы с производительностью запросов путем дублирования склада или прочих нужных аналитик в транзакции. Но это требует существенной переделки логики и предельной аккуратности. Такой подход годится для эксклюзивных случаев, в которых производительность архи-критична.
__________________
С уважением, glibs® |
|
26.03.2008, 22:39 | #14 |
Участник
|
Слава богу,
Цитата:
Сообщение от mazzy
разработчик
|
|
26.03.2008, 22:40 | #15 |
Модератор
|
Цитата:
Сообщение от mazzy
Дык, они и так разными запросами join'ятся.
.. посмотри чем он используется при помощи перекрестных ссылок. Этот метод определяет поля, поиск по которым дает очень селективную выборку. В зависимости от этого метода в Аксапте работает очень много кода для "оптимизации". См. например, \Classes\InventSumFinancial\setValueQty .. если идет фильтрация по селективному полю, то будут работать совсем другие запросы и совсем другие хинты Мне кажется, это тупиковое направление. Особенно если учитывать возможность добавления новых "селективных" аналитик. Как например должна выглядеть логика в случае указания двух "селективных" аналитик - выбирать "наиболее селективную"? А оптимизатор СУБД на что придуман? За него ведь "уже уплочено".. Цитата:
Попробуй сделать минимальную правку - добавь ГТД в метод isFlagSelective. Обрати внимание насколько изменилось поведение системы
Цитата:
А вообще говоря, согласен с тем, что сам InventDim - это результат программистского подхода: щас мы наваяем универсальный механизм, а пользователи его будут настраивать.
Идея универсального механизма хорошая, но механизм пора чуток обновить с учетом того, что самих аналитик и их комбинаций чуть больше, чем задумывалось на этапе проектирования Цитата:
Но перенести этот универсальный механизм в array - это не выход. Это тот же самый программистский подход - вид сбоку
Но не беда. Зато - идет мыслительный процесс Цитата:
Надо перерабатывать саму идеологию.
По крайней мере есть различие между номенклатурными аналитиками (комбинаций таких аналитик много, индексы селективные) и аналитиками хранения (комбинаций таких относительно немного) Разве что с тем, что комбинаций номенклатурных аналитик больше, не совсем согласен. It depends
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
26.03.2008, 23:11 | #16 |
Участник
|
Так. Я кажется выразился невнятно.
Ужас не в предлагаемой реализации. Ужас состоит в том, что чел предлагает поменять шило на мыло. При этом полностью отказавышись от совместимости с предыдущими версиями и, очень похоже, не разобравшись в предмете. Совсем как некоторые Майкрософты, партнеры или некоторые клиенты, которые переписывают Аксапту под девизом "мы сейчас за две недели не коленке сбацаем". Причем они уверены, что сбацают гораздо лучше, чем предшественники. Теперь к обсуждению: Цитата:
Сообщение от glibs
Если использовать WMS (даже без ГТД) — вполне реально. Партии и серийные номера раздувают InventDim сильно. В производстве это особенно актуально (там партии используются частенько, серийные номера иногда).
А селективность спасает только на определенных запросах. При раздутом другими аналитиками InventDim отбор проводок, которые относятся к определенному складу, например, превращается в трудоемкую задачу для сервера СУБД. Автор должен был либо проанализировать что уже сделано и как можно улучшить с сохранением совместимости. Либо проанализировать свое предложение - не станет ли "спасительных опеределенных запросов" меньше. Я не спорю. В свое время писал Добавление аналитики (и другие темы) и сейчас повторю: Аксапта работает с нормальной производительностью при условии что InventDim существенно меньше, чем InventTrans. Большой InventDim - зло. Аксиома. НО: во многих российских внедрениях проблемы возникают не из-за WMS, партий и серийных номеров. А из-за неправильно реализованного ГТД. Кроме того, народ добавляет складские аналитики, беря за образец ГТД, и делает это неправильно. Одним только включением ГТД (и добавленных по его подобию аналитик) в список селективных полей можно решить проблемы производительности в 60-80% внедрений. (Vadik правильно напомнил об индексе по ГТД. Это само собой разумеется) Еще раз повторю: согласен, большой InventDim - зло. Но разработчики стандартной аксапты об этом зле хоть как-то подумали, а автор "универсального" предложения - нет. Именно в этом заключается "ужас", на мой взгляд. Цитата:
В некоторых случаях можно пытаться решать некоторые проблемы с производительностью запросов путем дублирования склада или прочих нужных аналитик в транзакции. Но это требует существенной переделки логики и предельной аккуратности. Такой подход годится для эксклюзивных случаев, в которых производительность архи-критична.
Я более, чем уверен, что и ты, и Vadik, и несколько других человек реализуют этот способ корректно. И я более, чем уверен, что у большинства последователей этого совета будут проблемы с целостностью. Будь внимателен и осторожен. Предложенный тобой способ может быть и принесет выигрыш, но чреват массой засад и потерей целостности. Поэтому я бы не рекомендовал так делать пока разработчик не будет уверен в своих действиях на 200%. Мы говорим о разных "ужасах" Я с тобой согласен вот в чем: согласен, что тупиковым является направление "универсальных", "платформенных", "программистских" механизмов, которые, по мнению разработчика, будут работать "при любых настройках". Даже сейчас можно четко выделить два вида совершенно разных по сути аналитик: номенклатурные и аналитики хранения. Согласен, что тупиковым является дальнейшее попытки запрячь "вола и трепетную лань" в одну упряжку. Но на мой взгляд, не менее тупиковой является и попытка сменить "шило на мыло", сменить одну универсальную таблицу на один универсальный массив. Цитата:
Да. К сожалению Цитата:
Пора не "чуток обновить" механизм, а разделить его на несколько механизмов согласно логике и смыслу (возможно не универсальных) Цитата:
И в InventSum, и в заказах, и в журналах, и в накладных, и в транзакциях... Везде. А таблицу InventDim он предлагает удалить. А вот тут ты скорее всего прав. Как всегда Чел предложил и предоставил замечательный повод пообсуждать задачу. Зря бурчу. Спасибо. Цитата:
Можно подробнее? |
|
27.03.2008, 00:03 | #17 |
Участник
|
К сожалению, нельзя.
Во-первых, еще ничего не известно толком, так как планирование и идеи архитектурных изменений сейчас находятся только в зародыше. Во-вторых, я думаю, что и так стою на грани дозволеного в плане распространения информации о будущих релизах, что является конфиденциальным. сорри. |
|
|
За это сообщение автора поблагодарили: mazzy (5), belugin (2). |
27.03.2008, 09:57 | #18 |
Мрачный тип
|
Джентльмены, простите, что вмешиваюсь в высоконаучный спор мэтров ...
9(или сколько там ) полей в складской аналитике Вас пугают , а сам принцип линейной аналитики , который при добавлении нового аналитического разреза вынуждает создавать новое поле в аналитике - нет. А реально из этих 9 (или сколько там у Вас) сколько используются одновременно в одной проводке ? Два, три, четыре ? Тогда зачем плодить столь много ссылочных полей , большая часть которых для одной операции не заполняется ? Массив ссылок, массив Enum(определяет на кого ссылается данный уровень аналитики и настраивается при настройке соответствующей модели складской аналитики, выбирая только нужные) одинаковой размерности и для каждого поля массива ссылок набор relations на соотвествующие таблицы согласно значений Enum - вот вполне разумный выход вместо линейного набора N-дцати полей, из которых в лучшем случае используются 3-4 одновременно. У меня сейчас на одном проекте наколбасили аж 13 уровней аналитики складской, из которых в лучшем случае 3 одновременно используется - смотреть на эту порнографию тошно
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
27.03.2008, 10:12 | #19 |
Участник
|
Не плохо бы если сделали бы и так и так, а клиент пусть сам решает как ему удобнее.
|
|
27.03.2008, 10:16 | #20 |
Участник
|
Цитата:
Это реляционные таблицы и реляционные СУБД. Очень хочется послать читать теорию Цитата:
И что в этом плохого? "Лишние" выключаются конфигурационными ключами, секьюрити ключами, настройкой "отображение складских аналитик" Цитата:
Сообщение от TasmanianDevil
Массив ссылок, массив Enum(определяет на кого ссылается данный уровень аналитики и настраивается при настройке соответствующей модели складской аналитики, выбирая только нужные) одинаковой размерности и для каждого поля массива ссылок набор relations на соотвествующие таблицы согласно значений Enum - вот вполне разумный выход вместо линейного набора N-дцати полей, из которых в лучшем случае используются 3-4 одновременно.
Какой блин, enum? Вы посмотрите на настройку групп складской аналитики и на то сколько там параметров. Куда эти параметры девать будете? Какой блин, enum? Вы как выключать лишние при помощи конфигурационных ключей будете? Какой блин, enum? Как секьюрити будете раздавать? Как RLS включать?... Какой блин, enum? Как индексы ставить будете? Вы предлагаете механизм, похожий на механизм субконто в 1С:Бухгалтерии. Вы пробовали администрировать этот механизм? Вы видели эти запросы? Оптимизаторы, блин, хреновы... Ужас-ужас-ужас!!! Ну, продумайте до конца свою идею... Программисты, блин... Цитата:
2. Не смотрите: Выключите лишние при помощи конфигурационных ключей 3. Не смотрите: Настройте ключи безопасности Полей блин, ему жалко... Экономика, блин, должна быть экономной, блин... Зла не хватает... |
|
Теги |
axapta, faq, inventdim, производительность |
|
Похожие темы | ||||
Тема | Ответов | |||
dynamicsmatters: Performance and Inventdim PII | 17 | |||
dynamicsmatters: Dynamics AX Base Data Model Part II | 0 | |||
Dynamics AX Geek: #InventDimJoin | 0 |
|