Имя: Пароль:
1C
1С v8
максимальная производительность при получении остатков
0 Kulikov_12
 
13.01.16
14:00
добрый день!
1С Предприятие 8.3, конфигурация УТ 10.3

Есть регистр накопления - остатки, его измерения:
1. Контрагент
2. Склад
3. Номенклатура
4. ДокументПартии
--------------
нужна максимальная производительность, все поля Не индексированы.
по умолчанию в Таблице Остатков в SQL Server генерируется только один кластерный индекс.
кластерный индекс - это Период + Измерение1 + ... + ИзмерениеN.
в запросах на получение остатков отбор измерений задается в порядке следования так, как он задан в конфигураторе (кластерный индекс)

т.е. запрос выглядит следующим образом
ВЫБРАТЬ
    Остатки.ДокументПартии,
    Остатки.КоличествоОстаток,
ИЗ
    РегистрНакопления.ПартииТоваров.Остатки(&Дата, Контрагент = &Контрагент И Склад = &Склад И Номенклатура В (&Номенклатура)) КАК Остатки

заполнено только одно измерение 1.Контрагент либо измерение 2.Склад, сразу два этих измерения заполненными быть не могут.
вопрос.
если объединить эти два измерения в одно, увеличит ли это скорость получения остатков? какие плюсы, и минусы?

измерение Контрагент имеет тип 'СправочникСсылка.Контрагенты'
измерение Склад имеет тип 'СправочникСсылка.Склады'

вопрос актуален в связи с большим объемом данных, любое увеличение быстродействия даже на 5% уже хорошо.
1 Kulikov_12
 
13.01.16
14:41
с точки зрения быстродействия, как будет лучше объединить эти два измерения в одно, или оставить разделенными?
желательно развернутый ответ.
заранее спасибо!
2 vicof
 
13.01.16
14:47
Индекс-то есть, а его обслуживание регулярно делается?
3 Лефмихалыч
 
13.01.16
14:47
каким образом ты собираешься объединять два измерения в одно?
4 Лефмихалыч
 
13.01.16
14:49
Если ты собираешься добавить измерение составного типа, то попрощайся с производительностью - кластерный индекс при наличии отборов на это измерение использоваться не будет.
5 Лефмихалыч
 
13.01.16
14:50
и это... большой объем данных - это сколько?
6 Kulikov_12
 
13.01.16
14:53
(2) это новый регистр. сейчас идет ввод в эксплуатацию
я понимаю что важно, но сейчас хочу сразу сделать систему такой, чтобы она работала максимально быстро...
т.к. объем данных очень большой :)
контрагенты, у которых хранится наш товар 200 шт.
наши склады, 50 шт.
номенклатура, по которой мы торгуем, списываем со склада и обмениваемся с контрагентами, 20 000 шт.
документов, образующих новые партии, в месяц 10 000 и больше
7 Ник второй
 
13.01.16
14:54
(6) Копейки.... купите нормальныйсервер
8 Живой Ископаемый
 
13.01.16
14:54
просто добавить памяти и загнать ка можно больший кусок базы в буферпул
9 Kulikov_12
 
13.01.16
14:54
(3) сделать измерение составного типа
'СправочникСсылка.Контрагенты'
'СправочникСсылка.Склады'
10 Лефмихалыч
 
13.01.16
14:55
(6) пфф! и всё?..
11 Лефмихалыч
 
13.01.16
14:55
(9) ни в коем случае этого не делай. Составной тип - зло кипучее для производительности.
12 Kulikov_12
 
13.01.16
14:56
(4) >>кластерный индекс при наличии отборов на это измерение использоваться не будет.
почему? это же составный тип из ссылок, не число, строка, и т.д., т.е. ссылочный тип, по нему разве кластерный индекс не будет строиться?
13 Лефмихалыч
 
13.01.16
15:00
(12) строиться индекс будет, но отборы по этому полю будут транслированы в злоебучий "when then else", при одном взгляде на который оптимизатор устало скажет: "а, идите в допу - тэйбл скан!"
14 Kulikov_12
 
13.01.16
15:02
(7) спасибо, но пока вроде бы на стадии внедрения всё работает быстро, расчет себестоимости за 1 месяц по всему холдингу (200 контрагентов) делается в пределах суток.
но просто озадачился быстродействием, и хочу понять, что быстрее в моем случае, объединить 2 измерения и сделать одно составного типа, или оставить как есть :)
15 Лефмихалыч
 
13.01.16
15:02
в общем, чтобы задумываться об вопросах производительности надо сначала научиться пользоваться технологическим журналом и хотя бы просто на раз прочитать "настольную книгу эксперта" или хотя бы под подушку ее положить. Без этих знаний все твои потуги - пальцем в небо и суета.
16 H A D G E H O G s
 
13.01.16
15:03
(13) нет, если задать не только ссылку но и тип отбора.
17 Лефмихалыч
 
13.01.16
15:03
(14) сколько записей в регистре твоем?
18 Kulikov_12
 
13.01.16
15:03
(13) спасибо вам большое! теперь понял. с вами согласен.
19 Лефмихалыч
 
13.01.16
15:04
(16) эмм... пример покажешь?
20 H A D G E H O G s
 
13.01.16
15:04
Регистр.ИзмерениеСкладКонтрагент ССЫЛКА Справочник.Склады и Регистр.ИзмерениеСкладКонтрагент=&Склад
21 Лефмихалыч
 
13.01.16
15:05
(20) да ладно! И с "В" поможет, и с отбором по реквизитам?
22 Лефмихалыч
 
13.01.16
15:05
хотя с отобором по реквизитам кластер при любом раскладе не будет использоваться
23 H A D G E H O G s
 
13.01.16
15:06
(20) С "В" не пробовал. Отбор по реквизитам делайте потом, когда Остатки во временную поместите.
24 Kulikov_12
 
13.01.16
15:11
(17) >>сколько записей в регистре твоем?

ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ РегистрНакопления.ПартииТоваров
за 3 месяца - 20 млн.
25 FIXXXL
 
13.01.16
15:17
на два регистра разнести?
по типу свои остатки и остатки коммисионеров
26 Kulikov_12
 
13.01.16
15:26
(25) кстати да, очень хорошая идея. надо подумать. спасибо!
27 Eugene_life
 
13.01.16
15:28
(24) Плохо придется базе под реальной нагрузкой. По партиям же и себестоимость считается.. Очень скоро (после года эксплуатации) себестоимость будет за месяц считаться несколько суток. Может быть, вытащить детализацию в какую-то внешнюю таблицу, а в самом регистре хранить итоговые значения? например, за 3 дня или неделю. А детализацию до операции - во внешней таблице, и обращаться к ней только при необходимости..
28 Kulikov_12
 
13.01.16
15:44
(27) да, регистр предназначен для расчета себестоимости списанного (проданного) товара
ресурсы соответственно Количество, и Стоимость.

при списании делается запрос на получении остатков в разрезе Документов партий, и эти партии списываются по FIFO

ВЫБРАТЬ
    Остатки.ДокументПартии,
    Остатки.КоличествоОстаток,
    Остатки.СтоимостьОстаток,
ИЗ
    РегистрНакопления.ПартииТоваров.Остатки(&Дата, Контрагент = &Контрагент И Склад = &Склад И Номенклатура В (&Номенклатура)) КАК Остатки
29 Kulikov_12
 
13.01.16
15:45
(27) >>Может быть, вытащить детализацию в какую-то внешнюю таблицу, а в самом регистре хранить итоговые значения?

это как, у нас в регистре ведь итак хранятся обычные движения документов, а остатки хранятся в отдельной таблице остатков...
30 Kulikov_12
 
13.01.16
15:52
(27) после расчета себестоимости по каждой списанной (проданной) номенклатуре, эти данные выгружаются в Бухгалтерию,  и там они уже свернуты по документу одной строчкой.
было продано Иванову товара на сумму 100 тыс. руб., себестоимость проданного товара 70 тыс. руб.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn