Оптимальный порядок измерений и состав доп-индексов регистра накопления #694500


#0 by fisher
На примере конкретной ситуации. Допустим, есть оборотный регистр "ПланПродаж" Измерения: Сценарий, Подразделение, Контрагент, Номенклатура. Как определить для него сабж? Допустим, что сценариев парочка, а подразделений - пяток. Контрагентов и ассортимента - много. Примерно сопоставимое количество. Очевидно вроде, что первым измерением должно стоять достаточно селективное и при этом часто используемое в соединениях. На эту роль хорошо подходит Контрагент или Номенклатура. Правильно? Тогда по каким измерениям имеет смысл установить признак дополнительного индексирования? Очевидно, что сценарии и подразделения тоже будут постоянно использоваться в соединениях и отборах, но их селективность невелика. Т.е. вроде большого смысла создавать по ним доп-индекс нет. Правильно? Но возможно имеет смысл установить доп-индексирование по номенклатуре, если первым измерением - контрагент. Или нет? В общем, просьба гуру оптимизации производительности навести ясность.
#1 by fisher
Пока имхается, что выгоднее всего просто установить первым измерением контрагента, а вторым - номенклатуру. Чаще всего они используются в соединениях в паре, но контрагент чаще используется в отборах. В то время, как отбор по номенклатуре используется сравнительно редко. Доп-индексы вроде нет смысла создавать в этой ситуации. Ммм?
#2 by Hmster
говорить можно много, а лучше всего сделать замеры
#3 by fisher
Ожидаемый коммент. Я на такие тоже мастер.
#4 by y22-k
Есть же обработки на скуле показывающие рекомендуемые к созданию индексы запусти статстику на неделю и посмотри
#5 by fisher
Такое впечатление, что никто никогда в похожих ситуациях не делал никаких замеров, не смотрел на статистику и не делал никаких выводов. Все советуют как бы они поступили в первый раз в первый класс.
#6 by Maxus43
те, кто это делал - готовый рецепт тебе не дадут тоже. Такой опыт стоит денег, тебе же лень всё это замерять? а им лень это отдавать. И не факт что ситуация такая же, зависит от конкретики много
#7 by fisher
Ясно-понятно. Не на мисте надо такие вопросы задавать.
#8 by Maxus43
и на партнёрском кроме общих рекомендаций ничего не получишь...
#9 by Адский плющ
На первой конференции обсасывали этот вопрос.
#10 by Sammo
Количество записей еще не раскрыто
#11 by fisher
Допустим, пару десятков миллионов.
#12 by Рэйв
я обычно иду от меньшего к большему. То есть в таком порядке как у тебя в сабже.
#13 by fisher
Спасибо за первый коммент по существу.
#14 by fisher
А из каких соображений именно так?
#15 by fisher
Не совсем понял. В смысле, от меньшей селективности к большей? Сценарий-Подразделение-Контрагент-Номенклатура?
#16 by Рэйв
Из эстетических:-) Сравнительные замеры делать как то не приходило в голову.
#17 by Рэйв
Ну да.
#18 by MadHead
я устанавливаю порядок по частоте использования фильтров/соединений. Сценарий, Подразделение, Контрагент, Номенклатура Без отбора по сценарию вряд ли будут использоваться данные регистра. - это первое измерение. И так далее. Если часто используется отбор по контрагенту и при этому по предыдущим измерениям отбора нет, то можно дополнительно проиндексировать контрагента
#19 by fisher
Селективность индекса - не менее важная характеристика, чем частота его использования. Взять данные по некластерному индексу - довольно дорогостоящая операция (а в постгри, например, нет полного аналога кластерному индексу MSSQL, насколько я понял). Поэтому оптимизатор не использует такие индексы, т.к. дешевле выходит тупой перебор. Если сценария всего два (или вообще один) - то селективность такого индекса будет хуже не придумаешь.
#20 by х86
еще же в стародавние времена на ИТС была статья про индексы или уже нет таковой?
#21 by fisher
Кстати, интересный вопрос. К примеру, есть стандартный индекс Период+Сценарий+Контрагент+Номенклатура. А в запросе по периоду и сценарию отбор, а по контрагенту и номенклатуре - соединение. Будет ли при соединении с высокой вероятностью использован этот индекс при актуальной статистике и т.п.? Ну, это можно будет и потестить, если готового ответа нет... Вот тоже смутно такое припоминал еще по 8.1 Но найти не могу.
#22 by fisher
Не, соврал. Вроде есть у postgresql кластерные индексы. Но итогах регистров накоплений они в 1С не используются. Видать шибко ресурсоемкая штука.
#23 by fisher
Да и вообще, смотрю, индексы по измерениям 1С только в итогах строит. Т.е. если есть частые оперативные выборки за несколько дней месяца, а данных много - то может иметь смысл даже по первому измерению доп-индекс создавать.
#24 by Hmster
немного оптимизировал УТ10 на постгре. был большой косяк с рлс - около 150-200 групп доступа, у каждого менеджера штук по 20-30 групп как минимум было. поставил индексы в РС прав доступа и в таблицах по соединяемым полям. после этого бд стала шевелиться. на отчеты как правило можно забить, более важна логика программы, какие там соединения задействованы. порядок на производительность не мерял, но не думаю что будет ощутимый прирост
#25 by MadHead
про постгри нечего сказать не могу. Селективность важная характеристика безусловно и если сценарий будет иметь низкую селективность, то скорее всего при отборе только по сценарию индекс не будет использован. Но с подходом из запросы по максимуму будут использовать кластерный индекс который строится по умолчанию (ведь чаще всего отборов будет больше).
#26 by MadHead
скользкий конечно вопрос. На мой взгляд лучше уж создать агрегат или инклуд индекс средствами sql
#27 by samozvanec
очень интересный вопрос. я раньше всегда делал как в и , но потом почитал вот тут: и теперь хз. на эксперименты времени нет пока
#28 by fisher
Ну, что касательно типовых, то я неоднократно встречал рассказы о том, что сабж был причиной вынесения поля "Номенклатура" в регистре партий на первое место (перед складом).
#29 by Maxus43
в остальных регистрах зато номенклатура обычно в конце-середине... по типовым вобще сложно судить
#30 by fisher
Остальные, как правило, были "полегче". Там типа особого смысла не было оптимизировать.
#31 by fisher
Вообще, касательно 1С - особой необходимости в оптимизации производительности вообще не возникает на таблицах относительно небольших объемов, как я понимаю. Обычно с головой хватает скана по кластерному индексу по периоду, поэтому одинэсовцы и не заморачивались.
#32 by Maxus43
ну поди знай... РС вспомнить ЗУПовский если ГрафикиРаботПоВидамВремени - надо было оптимизировать... Там ещё в добавок стоят на всех измерениях "ОсновнойОтбор", нихрена не проиндексировано дополнительно и т.д.
#33 by fisher
Дополнительно индексировать - тоже надо очень осторожно, особенно на больших таблицах. База пухнет, запись замедляется. А реальный прирост на выборках далеко не всегда можно получить.
#34 by х86
тут немного про индексы
#35 by fisher
А как статья на ИТС называется? А то у меня ИТС украинский...
#36 by fisher
Для меня стало новостью, что использование в условиях по периоду функций НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА может привести к неэффективному выполнению запроса. Что-то я подобного не замечал...
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С