Имя: Пароль:
1C
 
Количество измерений в регистре
0 selenat
 
28.04.09
11:17
Стало вот интересно, это нормально вообще создавать регистры с количеством измерений больше десятка например? Скорость работы от этого не сильно страдает? А то смотрю например в типовой УТ в регистре ЗаказыПокупателей аж 12 измерений... О-0
1 Широкий
 
28.04.09
11:18
Сам то как думаешь?
2 selenat
 
28.04.09
11:20
(1) сам думаю, что не хорошо это. Но не настолько хорошо знаю внутренние механизмы, чтобы утверждать что-то уверенно..
3 Лефмихалыч
 
28.04.09
11:21
(0) скорости это не добавляет - факт, но иногда по-другому ни как
4 Terv
 
28.04.09
11:22
(3) всегда есть варианты. Было бы желание.
5 selenat
 
28.04.09
11:23
(3) то, что не добавляет - вопроса нет. Вопрос - на сколько убавляет. А вот насчет по-другому никак - можно бы поспорить. Сдается мне, что такие регистры-монстры появляются скорее от неграмотного проектирования системы...
6 selenat
 
28.04.09
11:23
(4) от тож...
7 dimoff
 
28.04.09
11:24
Никакого отношения количество измерений не имеет к скорости, имеет отношение лишь количество комбинаций. Если большинство измерений не заполняются или заполняются парой тройкой значений, то большого влияния на производительность не будет.
8 Mitriy
 
28.04.09
11:25
вопрос ни о чем...
9 Лефмихалыч
 
28.04.09
11:26
(4,5) но зачем-то же их можно больше трех создать :) сам не пробовал
10 dimoff
 
28.04.09
11:27
Главное индексировать измерения по которым будут в основном остатки получаться.
11 dimoff
 
28.04.09
11:27
(8) Хм, автор только час назах хвастался что всегда задает четккие и понятные вопросы :)
12 selenat
 
28.04.09
11:30
(7) это мнение из опыта с использованием тестов, из каких-либо статей о внутренней архитектуре 1С или из чего такой вывод? Звучит весьма правдоподобно, но хотелось бы обоснования услышать.
Кроме того, это означает, что если таки все (или большая часть) измерений задействуется для работы, то на скорости это очень даже должно сказываться. А в таком случае может быть стоило бы продумать другую струтуру регистров? Ибо зачем строить то, что не расчитано на полноценное использование всех возможностей?
13 selenat
 
28.04.09
11:31
(11) а что неясного и нечеткого в моем вопросе?
14 selenat
 
28.04.09
11:32
(8) вопрос об идеолгогии грамотного построения структуры конфы. Вопрос быстродействия - это разве вопрос ни о чем?
15 dimoff
 
28.04.09
11:34
(12) Это мнение из простейшей логики. Что делает механизм?
1. При проведении ищет строку итогов по комбинации измерений, пишет туда новое значение. Станет ли он дольше искать, если добавленные измерения не имеют большого количества возможных значений?
2. При запросе ищет в таблице остатков строки остатков по комбинации иизмерений, то же что и 1, зависит от того сколько дополнительных строк в таблице остатков способно создать измерение.

"А в таком случае может быть стоило бы продумать другую струтуру регистров?"
Имеет смысл говорить о конкретном регистре.
16 dimoff
 
28.04.09
11:34
(13) Шучу.
17 Лефмихалыч
 
28.04.09
11:35
(13) полагаю, ты не указал, в каких попугайских крыльях измеряется твое "сильно страдает". Да и критериев нормальности при проектировании структутры регистра ты тоже не определил. Исходя из этого, ответить на вопрос адекватно довольно трудно.
Я  просто предположил
18 Ненавижу 1С
 
гуру
28.04.09
11:36
(7) тогда зачем столько?
19 selenat
 
28.04.09
11:37
(17) я указал парметр, который меня интересует. Скорость работы...
20 selenat
 
28.04.09
11:40
(15) видишь ли, пустое значение измерения - это тоже значение. Соответственно, ищет и пишет он с учетом и тех измерений, которые пользователь может вообще не использовать. Во всяком случае мне так кажется...
21 selenat
 
28.04.09
11:41
+20 я уже не раз сталкивался с тем, что простейшая логика (наша логика) не всегда соответствует реальным механизмам платформы. Поэтому хотелось бы более существенных подтверждений этому...
22 dimoff
 
28.04.09
11:43
(18) Чтобы ты мог получать полную аналитику. Давай возьмем регистр упомянутый в (0). Там реально засоряет регистр только измерения Номенклатура и ЗаказПокупателя, все остальные: Характеристика, Ед.изм, Проценты всяких скидок, они для комбинации Номенклатура, ЗаказПокупателя будут единственные, соответственно увыеличения числа записей не будет, но зато по ним ты сможешь делать любые отборы, почему нет?
23 selenat
 
28.04.09
11:44
Если некоторым вопрос кажется неконкретным, давайте его сформулируем так. Есть регистр, предположим с 5 измерениями. Предположим, что реально используются все. И хочется туда добавить еще одно, которое тоже будет использоваться. Можно ли заранее предсказать, насколько это может повлиять на скорость работы с регистром...
24 dimoff
 
28.04.09
11:45
(20) Пишет и пишет, это просто лишнее поле в регистре остатков, на производительность влияет не более, чем лишнее поле в таблице документа. Почитай внимательно и медитативно 22.
25 dimoff
 
28.04.09
11:47
(23) Ответ в 22, проанализирую насколько это увеличит общее количество записей таблицы остатков. В примере с Заказ покупателя реально только два измерения его увеличивают, ну может ещё хаарактеристика, если в одном заказе может быть одна тноменклатура с кучей разных характеристик. Все остальные не увеличивают число записей, а анналитику получать позволяют.
26 selenat
 
28.04.09
11:48
(24) прочитал. И насколько я знаю, системе по барабану - что это конкретно за измерение. Будет ли это номенклатура с заказом или что-то второстепенное. На скорость может повлиять только индексированность измерения, а не его смысл...
27 selenat
 
28.04.09
11:49
(25) т.е. ты считаешь, что на скорост работы регистра влияет только размер (количество записей), а количество аналитических разрезов не важно? О-0
28 Terv
 
28.04.09
11:51
(27) мне кажется в этом вопросе нужно смотреть в сторону скуля, сколько полей он сможет проиндексировать? а так же на возможные блокировки
29 Terv
 
28.04.09
11:52
+(28) да и вообще мне кажется нужно отдельно рассматривать вопросы чтения и записи.
30 selenat
 
28.04.09
11:53
(28) согласен, это должно существенно влиять...
31 dimoff
 
28.04.09
11:56
(27) Кол-во записей в регистре остатков.
(28) О каких блокировках речь? Какие поля он индексирует?
32 dimoff
 
28.04.09
11:57
(26) Значит ты вообще не понял что написано в 22
33 Terv
 
28.04.09
12:00
(31) ну так в таблице итогов индексируется все
вот нарыл
Индексы таблиц базы  данных

Регистр накопления

Основная таблица регистра
Индекс    Условие
Период + Регистратор + НомерСтроки (Кластерный)    Всегда.
Регистратор + НомерСтроки    Всегда.
Измерение + Период + Регистратор + НомерСтроки    Измерению "Измерение" задано свойство "Индексировать".
Реквизит + Период + Регистратор + НомерСтроки    Реквизиту "Реквизит" задано свойство "Индексировать".

Таблица остатков
Индекс    Условие
Период + Измерение1 + ... + ИзмерениеN (Кластерный)    Для регистров вида "Остатки".

Таблица оборотов
Индекс    Условие
Период + Измерение1 + ... + ИзмерениеN (Кластерный)    Для регистров вида "Обороты".
34 selenat
 
28.04.09
12:00
(31) моя твоя не ферштейн. Еще раз вопрос в (27).
(29) тоже верно. Блокировки еще никто не отменял...
35 Terv
 
28.04.09
12:01
+(33) т.е. если измерения регистра только ссылочного типа, то имеем
13 полей для индексирования.
36 Terv
 
28.04.09
12:02
+(35) если в измерениях встречаются простые типы, то еще больше
37 Живой Ископаемый
 
28.04.09
12:03
Вообще-то если добавить измерение, то запись замедлится - потому что по этому измерению нужно еще и индекс построить... то сделать дополнительную операцию записи на диск... Но если это клиент-серверный вариант, то построением индексов занимается СКЛ-сервер.. как и когда он строит индексы - нужно его читать...
38 dimoff
 
28.04.09
12:03
(33) А, не знал, все равно мне кажется на скорость не сильно влияет.
(34) Ответил в 31.
39 Живой Ископаемый
 
28.04.09
12:04
на скорость чтения да, возможно и не влияет...
40 dimoff
 
28.04.09
12:05
(37) А какой процент времени занимает построение индекса от общего времени записи данных?
41 dimoff
 
28.04.09
12:05
На скорость чтения вообще не влияет
42 selenat
 
28.04.09
12:05
(38.2) не понял ответа. То, что количество записей влияет на скорость - вопросов нет. Вопрос был в том, считаешь ли ты, что количество аналитических разрезов на нее не влияет...
43 dimoff
 
28.04.09
12:06
(33) А что, таблица остатков не индексируется отдельно по измерениям с флагом индексировать? Это было бы очень и очень странно.
44 dimoff
 
28.04.09
12:07
(42) На скорость влияет размер таблицы остатков, никакого пряямого отношения к количеству записей он не имеет.
45 Живой Ископаемый
 
28.04.09
12:08
(40) не знаю... Могу сделать регистр с 50 измерениями и записать в него 100 по 1000 записей...
Потом добавить еще 50 измерений и повторить запись.. в Обоих случаях замерить время...
Правда на файловой версии... сделать?
46 dimoff
 
28.04.09
12:08
Записей может быть миллион, а размер таблицы остатков может составлять 2 записи, а может и миллион. Я утверждаю, что на размер таблицы остатков регистра ЗаказыПокупателей влияет только количество комбинаций Заказ покупателя -> Номенклатура, все остальные измерения не создают дополнительных записей.
47 dimoff
 
28.04.09
12:09
(45) было б интересно.
48 dimoff
 
28.04.09
12:10
+46 И посему увеличивают время работы только на увеличение времени составления индекса при записи в регистр остатков.
49 Terv
 
28.04.09
12:12
вот что нашел

"Принципиальным отличием кластерного индекса от индексов других типов является то, что при его определении в таблице физическое расположение данных перестраивается в соответствии со структурой индекса."

т.е. имеем большой индекс, имеем тормоза на запись

"Ограничения индексов

Индекс может быть создан на основании нескольких полей. В этом случае существует ограничение – длина ключа индекса не должна превышать 900 байтов и не более 16 ключевых столбцов. На практике это означает что при создании индекса, включающего более 16 полей, индекс усекается."

+ если переползаем за ограничение, то получим тормоза на чтение

PS. цитаты отсюда http://gilev.blogspot.com/2008/09/1_13.html
50 Terv
 
28.04.09
12:14
а размеры таблиц и скорость для MS SQL скорее всего очень слабо связаны, обход проблем с размером эт же одна из его функций.
51 dimoff
 
28.04.09
12:16
(49)
"Принципиальным отличием кластерного индекса от индексов других типов является то, что при его определении в таблице физическое расположение данных перестраивается в соответствии со структурой индекса."

т.е. имеем большой индекс, имеем тормоза на запись

====

Не понял вывода, не каждый же раз кластер переопределяется. Толькко при изменении числа измерений.
52 Terv
 
28.04.09
12:17
(51) там далее есть
"Необходимо избегать создания кластерного индекса для часто изменяемых столбцов, поскольку сервер должен будет выполнять физическое перемещение всех данных в таблице, чтобы они находились в упорядоченном состоянии, как того требует кластерный индекс. Для интенсивно изменяемых столбцов лучше подходит некластерный индекс."
53 selenat
 
28.04.09
12:17
(50) ну, все-таки связаны конечно. Обход этих проблем связан как раз с использованием индексов. И взаимосвязь объема с временем получения информации при этом выражается логарифмическим законом....
54 dimoff
 
28.04.09
12:17
+ если переползаем за ограничение, то получим тормоза на чтение
=
Только если конец индекса может быть симльно различным, если поставить измерения в нужной последовательности подобного не будет. Только что посмотрел измерения Заказа покупателя, именно два упомянутые мною индексированы.
55 dimoff
 
28.04.09
12:19
(52) Что такое "часто изменяемые столбцы"?
56 selenat
 
28.04.09
12:19
(54) а у меня ЗаказПокупателя не индексирован. Только номенклатура...
57 Terv
 
28.04.09
12:22
(54) посмотри (33) и увидишь что для таблицы остатков индекс строиться по всем измерениям, а настройка индексировать влияет только на таблицу движений

так же не забываем, что все что не попало в индекс, блокируется (т.е. увеличиваем вероятно блокировок)
(55) поля, т.е. в нашем случаи измерения, т.е. при каждой новой записи (появление нового значения измерения) в такую таблицу, идет перестроение таблицы остатков.
58 selenat
 
28.04.09
12:23
(52) для таблицы остатков кластерный индекс строится по всем измерениям независимо от признака "индексировать"?
Это получается тогда, что только порядок следования измерений влияет на скорость работы с таблицей остатков?
59 Terv
 
28.04.09
12:23
(58) да.
60 selenat
 
28.04.09
12:24
(59) очень интересно...
61 Terv
 
28.04.09
12:24
(59) хотя MS SQL "вещь в себе" что там на что влияет, 100% утверждать не получиться ;)
62 Terv
 
28.04.09
12:25
(60) насколько я помню еще в 7ке рекомендовали часто используемые измерения располагать первыми.
63 selenat
 
28.04.09
12:26
(62) да, я тоже припоминаю...
64 Terv
 
28.04.09
12:27
вообще можно посмотреть для примера УПП, где проектирую новую подсистему затрат 1С-ики (учитывая проблемы производительности) создали регистры УчетЗатрат и УчетЗатратРегл, всего с 4мя измерениями, вместо 8-9 в старой подсистеме.
65 dimoff
 
28.04.09
12:29
(57) "поля, т.е. в нашем случаи измерения, т.е. при каждой новой записи (появление нового значения измерения) в такую таблицу, идет перестроение таблицы остатков."

Таким образом опять же возвращаемся к тому с чего начали - количество измерений неважно, важно насколько часто появляются новые комбинации.
66 selenat
 
28.04.09
12:30
(64) я не работал с УПП и не отслеживал историю ее изменения. Но насколько я понимаю, при реальном использовании всех (или большого количества) измерений, проблема, озвученная в (0) имеет место быть. Т.е. это действительно неграмотное проектирование конфы...
67 Terv
 
28.04.09
12:32
(65) мое мнение, что для записи скорее всего да, для чтения и блокировок безразлично.
68 selenat
 
28.04.09
12:32
(65) 2 возражения на это.
1. Зачем тогда вообще проектировать регистр, не расчитывая на его полноценную работу со всеми измерениями.
2. Если ты добавляешь в регистр измерение, которое предполагается реально использовать, то это действительно может повлиять на скорость работы...
69 Terv
 
28.04.09
12:33
+(67) хотя возможно, чем меньше индекс, тем меньше будет перестроения таблицы...
у кого бы спросить?
70 selenat
 
28.04.09
12:33
(67) так вроде блокировки на запись как раз более сильные, чем на чтение...
71 Terv
 
28.04.09
12:34
(70) а я про блокировки на запись и говорил.
в 1С читается в основном, вообще не смотря на блокировки.
72 selenat
 
28.04.09
12:38
Так, давайте ка все-таки уточним для особо продвинутых типа меня. Есть два измерения. Одно из них принимает мало различных значений, другое - много. В каком порядке их следует поставить в конфигураторе, чтобы сократить перестроения в таблице остатков?
73 dimoff
 
28.04.09
12:38
(64) О каких релизах речь? Испокон веку там 4 измерения.
(66) Не глупи, совершенно разные регистры с разным назначением. В Учет затрат вообще крайне специфиический набор измерений.
74 dimoff
 
28.04.09
12:40
(67) Да
(68) Они реально используются, почитай ещё раз внимательно 22. Их использоввание не увеличивает количество записей.
(72) По барабану. На перестроения не повилияет.
75 selenat
 
28.04.09
12:41
(73.2) про учет затрат я ничего не знаю, поскольку с УПП не работал. Я сейчас говорю об идеологии. Согласись, что даже резервирование товара можно сделать при помощи дополнительного измерения в регистре остатков. Ан нет, выделяют в отдельный регистр. Это к вопросу о разных возможностях проектирования одной и той же задачи...
76 dimoff
 
28.04.09
12:41
+74 "Их использоввание не увеличивает количество записей" = Их использоввание не увеличивает количество записей в таблице остатков
77 dimoff
 
28.04.09
12:43
(75) Скажи какое из измерений регистра Заказы покупателей лишнее и почему? Я обосновал в 22 что ни одно из неиндексированных измерений этого регистра на производительность не повлияет.
78 selenat
 
28.04.09
12:45
(76) да почему же не увеличивает количество записей? Не увеличивает, если есть измерения, которые не используются. Для используемых измерений возникают новые комбинации, которые может быть грамотнее было бы вводить через дополнительный регистр, а не измерение в этом?
79 Terv
 
28.04.09
12:46
(73) это для РАУ, страрая подсистема использует регистры: Затраты, Незавершенное производство, Брак в производстве, Затраты на выпуск продукции ... для каждого учета в отдельности ... :)) а еще забыл про наработку, тоже отдельные регистры
и еще Партии товаров...

вместо всего этого созданы только 2 регистра УчетЗатрат и УчетЗатратРегл
80 Terv
 
28.04.09
12:47
+(79) просто 1С-ики использовали старый прием, для уменьшения количества измерений применил "кортежи"
81 selenat
 
28.04.09
12:48
(80) что есть "кортежи"?
82 Terv
 
28.04.09
12:50
(81) ну пример у тебя есть 4 измерения: организация, контрагент,договор, заказ ..
Создаешь справочник, с такими же полями, и вместо 4 измерений делаешь регистр с 1 измерением этого справочника.
83 selenat
 
28.04.09
12:50
(82) ага, ясно.
84 Terv
 
28.04.09
12:52
(83) только эти засранцы, сделали хитрее, они использовали не поля справочника, а механизм аналогичный механизму свойств, что бы уменьшить количество блокировок, + возможность легко расширить разрезы учета.
85 selenat
 
28.04.09
12:53
(74.3) не повлияет или просто невозможно предсказать - как повлияет в каждом конкретном случае?
86 selenat
 
28.04.09
12:54
(84) разумно. Хотя программно работать с этим сложнее...
87 selenat
 
28.04.09
13:01
Я правильно понимаю, что перестроение данных в соответствии с кластерным индексом идет в момент записи данных в регистр.

Вот кстати, если взять регистр ОстаткиТоваровНаСкладах. Там сначала идет склад (складов заведомо у всех не много), потом уже Номенклатура, характеристика и т.д. Интересно было бы посмотреть на скорость, если номенклатуру перестроить выше склада...
88 selenat
 
28.04.09
13:04
отлучусь ненадолго...
89 Terv
 
28.04.09
13:04
(87) лови France он вроде у нас спец по этим вопросам, хотя в последнее время его не видно :(
90 Terv
 
28.04.09
13:06
+(89) либо автору ссылки которую я приводил, но здесь он тоже давно не появляется
Demiurg
http://www.gilev.ru/
91 dimoff
 
28.04.09
13:10
(78)
Смотри, Измерение единица измерения используется? Да. Но увеличит ли оно количество записей, если все равно в одном документе Заказ покупателя редчайший случай чтобы одна номенклатура продавалась по двум разным единицам измерения. Цена то же самое, скидкка то же самое. Договор контрагента увеличит? Нет. На каждый заказ один договор.
92 selenat
 
28.04.09
13:48
(90) спасибо!
(91) согласен. Я действительно не рассматривал внимательно конкретные измерения этого регистра, хотя именно его приводил в качестве примера в (0). А сам подразумеваю при этом использование независимых друг от друга измерений.
Т.е. ты все это время говорил, что при при наличие таких вот зависимых измерений, их количество не имеет значения. Так? В этом случае скорость чтения данных из таблицы остатков зависит только от порядка следования измерений.
Но если рассматривать независимые между собой измерения, то наверное все-таки имеет значение их количество, поскольку количество комбинаций их значений увеличивается. Так?
93 dimoff
 
28.04.09
13:57
(92) Да, но опять же это не повод сразу же делать новый регистр, скорость может увеличиться несущественно, будет зависеть от количества проводимых документов и куча всяких прочих факторов надо учитывать.
94 selenat
 
28.04.09
14:13
(93) вот, собственно, мы и подошли к вопросу, при каких обстоятельствах какой способ структуры регистров лучше использовать с точки зрения производительности. Вопрос в (0) именно это и подразумевал...
95 Живой Ископаемый
 
28.04.09
18:48
Прошу прощения за перерыв, эксперименты отняли больше времени, чем я планировал...
И сам план по ходу пришлось изменить... Пока статистика такая:
http://docs.google.com/Doc?id=df8g2nxh_288gs9hgt5f
96 Живой Ископаемый
 
28.04.09
18:48
то есть индексированность может влиять довольно существенно... Я бы так сказал...
97 у лю 427
 
28.04.09
19:04
для каждой версии скуля существует рекомендация по количеству измерений.
98 selenat
 
29.04.09
10:42
(97) а где про это подробнее можно почитать...
AdBlock убивает бесплатный контент. 1Сергей