|  | 
|  23.12.2011, 20:01 | #1 | 
| Участник | InventLocationId в InventTrans 
			
			Кто-нибудь задумывался о том, что перенос аналитики Склад в Таблицу Складских проводок(InventTrans) заметно увеличит производительность всего, что с этим связано?
		 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | 
|  23.12.2011, 20:28 | #2 | 
| Участник | 
			
			Задумывались. Но так и не сделали. Сделали для InventSum. Результатом довольны. | 
|  | 
|  23.12.2011, 21:37 | #3 | 
| Участник | 
			
			не плохое решение, как сильно повлияло на производительность?
		 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | 
|  23.12.2011, 22:10 | #4 | 
| Участник | 
			
			Сильно. Чем больше записей в InventSum - тем сильнее. Используется партионный учет. По сути везде где надо быстро получить остатки в разрезе номенклатур и складов, используется только InventSum без джоинов. Поэтому цифр сходу не скажу. (Надо специально попробовать с джоином) | 
|  | 
|  24.12.2011, 05:48 | #5 | 
| Участник | Цитата: Почему решили именно в InventSum?(если для остатков - идеальное решение).Но ведь добавление склада в InventTrans решает все проблемы. И остатков и оборотов.У Вас были сомнения? Если можно расскажите? 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | 
|  24.12.2011, 10:09 | #6 | 
| Ищущий знания... | Цитата:  ). И сделано это было, когда поняли, что надо что то делать с производительностью! Отчеты по остаткам в разрезе складов, а так же отчеты анализа приходов \ расходов по складам (это не все, первое что вспомнилось) начали работать гараздо быстрее! А именно, например, остаток по складам вместо ~30 мин, стал выводится за 1-2 минуты. P.S. это делали ещё в трешке. 
				__________________ "Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем | 
|  | |
| За это сообщение автора поблагодарили: Pustik (3). | |
|  24.12.2011, 12:12 | #7 | 
| Участник |   Цитата: Надеюсь что это будет сделано в следующей версии системы. Кстати и Dimension туда бы тоже неплохо... Кто еще что туда предложит? Получится одна универсальная таблица. Но микрософт не чем не сможет похвастать перед конкурентами. Все будут говорить - в нашей erp 1000 таблиц или 2000 таблиц. А у нас, скажет микрософт, всего одна таблица и дальше добавит, зато производительность, удобство работы и прочее... Но вторую часть фразы уже ни кто слушать не будет. | 
|  | 
|  24.12.2011, 22:45 | #8 | 
| Участник | Цитата: Держать аналитики в отдельной таблице - хорошая идея, однако "у нас все аналитики равны, но некоторые равнее других". | 
|  | |
| За это сообщение автора поблагодарили: Logger (3), lev (3). | |
|  25.12.2011, 12:49 | #9 | 
| Участник |   Цитата: | 
|  | 
|  24.12.2011, 23:46 | #10 | 
| Участник | 
			
			Извините,не уточнил , обороты, нам необходимо видеть в режиме Online. Такая вот специфика предприятия.
		 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | 
|  25.12.2011, 13:11 | #11 | 
| Участник | 
			
			Не поленился. На тестовой базе сделал аля InventTrans2. Сделал поле Склад. Джобом перекопировал данные из стандартного InventTrans(c учетом склада) в новый InventTrans2. Отрихтовал оборотку (убрал из джоина InventDim). Отчет выдал информацию в 10 раз быстрее, причем за год, по всем складам. По конкретному складу, вообще нечего говорить, если настроить  в InventTrans2 индекс.
		 
				__________________ -Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. | 
|  | |
| За это сообщение автора поблагодарили: lev (2). | |
|  25.12.2011, 19:47 | #12 | 
| Участник | Цитата: 
		
			Сообщение от Pustik
			   Не поленился. На тестовой базе сделал аля InventTrans2. Сделал поле Склад. Джобом перекопировал данные из стандартного InventTrans(c учетом склада) в новый InventTrans2. Отрихтовал оборотку (убрал из джоина InventDim). Отчет выдал информацию в 10 раз быстрее, причем за год, по всем складам. По конкретному складу, вообще нечего говорить, если настроить  в InventTrans2 индекс. Если примените на рабочей, опубликуйте, пожалуйста, результат для системы под нагрузкой. Причем именно на InventTrans и не на копии. Интересно сравнить результаты. Подозреваю что разница будет еще больше. | 
|  | 
|  25.12.2011, 14:40 | #13 | 
| Administrator | 
			
			Напрашивается следующий вывод (для Микрософта). Нужно аналитику склад сделать первичной и неотключабельной в форме группы складских аналитик. Наверное, даже идеологически вынести склад из складских аналитик, и добавить отдельным полем во все таблицы, где есть inventDimId (аналог - заказы на перемещения). Только надо подумать, что делать с галкой "финансовый" (а хотя ее тоже наверное можно по умолчанию считать включенной). С добавлением всех аналитик в InventTrans могут возникнуть сложности - т.к. все же у всех есть аналитика Склад (пусть даже у мелких контор он один), а вот все остальные аналитики далеко не всегда задействованы, а отключить выборку по ним сейчас все же проще (через InventDimParn), нежели когда они будут разбросаны по всем таблицам. Опять-таки необходимо иметь возможность добавления складских аналитик силами внедренца в боле-менее разумные сроки. В общем, перед Микрософтом со складскими аналитиками стоят 3 задачи: - Быстродействие - Возможность включения / отключения пользователем (не разработчиком) - Обеспечение возможности добавления аналитики внедренцем с минимальным изменением штатного кода. - Навешивание на аналитики разного функционала (у складов есть своя логика, у серийных номеров - тоже есть своя и т.д.). Сейчас во главе угла стоит возможность включать / отключать аналитики пользователем (напоминаю, что для этого требуется не только менять СУБД, а еще и писать выборки с использованием макросов #InventDim*). Это очень сильная возможность, в т.ч. маркетинговая. Поэтому, МСу нужно решить вопрос быстродействия не ломая эту возможность. Если МС пожертвует отключабельностью аналитики Склад, то тогда можно будет сконцентрироваться на быстродействии. По идее - вряд ли кто использует логистический контур системы с отключенной аналитикой Склад, поэтому тут можно было бы МСу и рискнуть. Но вопрос с остальными аналитиками остается открытым. 
				__________________ Возможно сделать все. Вопрос времени | 
|  | 
|  25.12.2011, 14:52 | #14 | 
| Участник | 
			
			Если MS сможет продавать Аксапту на большие проекты (с большим числом транзакций), то скорее всего вопрос решится сам собой. Жизнь заставит.
		 | 
|  | 
|  25.12.2011, 15:36 | #15 | 
| Moderator | 
			
			Очень странно, что перенос склада в inventTrans дал такой прирост производительности. Могу поверить в типичный показатель накладных расходов на джойн двух таблиц в 40-50%. Могу поверить на нетипичные случаи с 200% накладных расходов. Не могу поверить в накладные расходы в 900%  Мне кажется, у вас там просто какая-то беда с планом запроса в стандартной оборотке. Может статистика кривая, может сам сиквел глючит почему-то, может индексы не перестраивались несколько лет. В общем - попробуйте план запроса выщемить и выложить. | 
|  | |
| За это сообщение автора поблагодарили: Logger (3). | |
|  25.12.2011, 17:01 | #16 | 
| Участник |   
			
			От объема памяти зависит много, но в данном случае по сути не зависит ни чего! А верить не надо - возьми например, тот же x++ (хотя лучше c++) и напиши на нем выборку без использования оператора select со связкой двух таблиц с использованием индекса. (Если кто не знает, то индекс - это тоже такая таблица только сортированная). И все недоумение сразу пропадет... | 
|  | |
| За это сообщение автора поблагодарили: fed (-3). | |
|  25.12.2011, 17:42 | #17 | 
| Участник | |
|  | 
|  25.12.2011, 17:51 | #18 | 
| Moderator | Цитата: Последний раз редактировалось fed; 25.12.2011 в 18:06. | 
|  | 
|  25.12.2011, 18:33 | #19 | 
| Участник | Цитата: 
		
			Сообщение от fed
			   А это такое проявление "научного подхода" к внедрениям. Автор считает что индекс, это не B-дерево, а таблица отсортированная. Также автор считает что джойн на SQL Server (все равно какой - sort/merge, hash join, nested loop join) легко может быть смоделирован с помощью вложенного селекта на клиентской стороне. Причем - и в этом, вероятно,  суть "научного подхода", писать джойн надо не не ламерском X++, а на  Хотите - можно написать на Х++, вместо таблиц здесь можно использовать контейнер без операции поиска, только с запоминанием индекса элемента. Суть задачи сводится к выборке по двум таблицам и четырем индексам: фильруем по полю 1 в первой таблице, связываем по полю 2 таблицы, фильтруем по полю 3 вторую таблицу. В первой таблице есть 2 индекса по полю 1 и полю 2 соответственно, аналогично во второй есть индексы по полям 2 и 3. А ваше предположение что авторы которые пишут SQL сервер обладают тайным знанием - в корне неверно, скорее те кто использую SQL по большей части бездари и по этому разница бросается в глаза... Но вы fed уж не обижайтесь - я не про Вас, ваши обиды мне дорого обходятся...   | 
|  | |
| За это сообщение автора поблагодарили: Vadik (-6). | |
|  25.12.2011, 18:46 | #20 | 
| Участник | Цитата: А ключевая проблема в том что выборка по двум таблицам принципиально плохооптимизируемая операция. Например некорректное решение структуры данных при объемах данных порядка биллиона операций хоронит проект... Но чаще всего мы работаем с маленькими таблицами. При этом мы работаем кое как - и все работает быстро. И тогда лагание на десятках миллионов записей всех ставит в тупик... Последний раз редактировалось Мартынов Дмитрий; 25.12.2011 в 18:51. Причина: про кое как забыл написать | 
|  |