Вход | Регистрация
 

Таблица итогов в десятки раз больше таблицы движений

Таблица итогов в десятки раз больше таблицы движений
Я
   OldCondom
 
31.03.21 - 12:49
УПП.
Регистр накопления "Расходы при УСН".

Таблица движений:  dbo._AccumRg28133    5 605 052(число записей) 1 868 352(данные Кб)
Таблица итогов: dbo._AccumRgT28152    164 660 849(число записей) 51 091 520(данные Кб)

Я так полагаю, это не совсем нормально. Думал нулевые записи(это вроде запись, при которой все ресурсы = 0, верно?), ни одной не выдал запросом:
SELECT count(*)
  FROM [dbo].[_AccumRgT28152]
  where [_Fld28147] = 0 and [_Fld28148] = 0 and [_Fld28149] = 0


Пересчет итогов увеличивает размер таблицы. Делал truncate table, потом пересчет - результат схож.
Пока что еще не делал ТИИ, может быть что и изменится.

Вопрос: на что обратить внимание? Откуда такое количество записей и данных? Что не так может быть с базой? Таких регистров 2.
   OldCondom
 
1 - 31.03.21 - 12:52
И кстати да, странно, что номера таблиц не совпадают, хотя может это и норма. Названия таблиц смотрел через ПолучитьСтруктуруХраненияБазыДанных().
   acanta
 
2 - 31.03.21 - 12:54
Предположим, есть движения, которые сформировали развернутые остатки (неважно, приход или расход). Предположим что периодичность хранения итогов не месяц а день...  
Предположим, что единственное движение было год назад...
   H A D G E H O G s
 
3 - 31.03.21 - 12:56
Или на начало тысячелетия...
   H A D G E H O G s
 
4 - 31.03.21 - 12:57
   OldCondom
 
5 - 31.03.21 - 12:58
Понял, уже думаю над запросом. Обработку скачал, спасибо
   OldCondom
 
6 - 31.03.21 - 12:58
а, ну собственно в обработке и есть запрос)
   vis_tmp
 
7 - 31.03.21 - 12:59
(6)Что там?
   Вафель
 
8 - 31.03.21 - 13:00
на всякий случай можно поставить начало периода рассчитанных итогов
   acanta
 
9 - 31.03.21 - 13:03
(8) во! А можно начало периода рассчитанных итогов каждый месяц сдвигать на начало этого месяца?
   Ненавижу 1С
 
10 - 31.03.21 - 13:10
(4) немного рефакторинга:

&НаСервере
Процедура ПоказатьНаСервере()
    ПоказатьТаблицуНаСервере(ТаблицаМинимальныхДат,"МинимальнаяДата",Ложь);
    ПоказатьТаблицуНаСервере(ТаблицаМаксимальныхДат,"МаксимальнаяДата",Истина);
КонецПроцедуры

&НаСервере
Процедура ПоказатьТаблицуНаСервере(Таблица, ИмяКолонки, ПоУбыванию)
    
    СуффиксСортировки = ?(ПоУбыванию," Убыв","");
    Таблица.Очистить();
    Для Каждого Метаданное Из Метаданные.РегистрыНакопления Цикл
        Запрос=Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    Регистр.Период КАК Период
        |ИЗ
        |    РегистрНакопления."+Метаданное.Имя+" КАК Регистр
        |
        |УПОРЯДОЧИТЬ ПО
        |    Период"+СуффиксСортировки;
        Выборка=Запрос.Выполнить().Выбрать();
        Если не Выборка.Следующий() Тогда
            Продолжить;
        КонецЕсли;
        
        НоваяСтрока=Таблица.Добавить();
        НоваяСтрока.ИмяРегистра=Метаданное.Синоним;
        
        НоваяСтрока[ИмяКолонки]=Выборка.Период;
        НоваяСтрока[ИмяКолонки+"Строкой"]=Выборка.Период;
    КонецЦикла;
    Таблица.Сортировать(ИмяКолонки+СуффиксСортировки);

КонецПроцедуры
   Kassern
 
11 - 31.03.21 - 13:21
(10) тогда уж:
 Если Выборка.Следующий() Тогда
        
        НоваяСтрока=Таблица.Добавить();
        НоваяСтрока.ИмяРегистра=Метаданное.Синоним;
        
        НоваяСтрока[ИмяКолонки]=Выборка.Период;
        НоваяСтрока[ИмяКолонки+"Строкой"]=Выборка.Период;
КонецЕсли;
   Галахад
 
12 - 31.03.21 - 13:27
Хм. А к зачем тут рефакторинг? Обработка разовая. Кода на один экран.
   mistеr
 
13 - 31.03.21 - 13:34
(2) >Предположим что периодичность хранения итогов не месяц а день

А что, так можно? :)
   arsik
 
14 - 31.03.21 - 14:04
А в чем критичны очень в будущее или в прошлое смещение дат?
Если в прошлое, то там по минимуму, ну будет хранится итог по одному движению дохрелиард раз. Ну допустим 1980 год, 490 месяцев.
Если в будущее, то итоги то актуальны на текущий месяц, они в будущее не рассчитываются же.
   H A D G E H O G s
 
15 - 31.03.21 - 14:10
(14) 490 вставочек остатков при проведении документа, если попадешь на тот срез измерений.
   H A D G E H O G s
 
16 - 31.03.21 - 14:11
(14) Но обычно там нулевая дата, когда движения делаются не по дате документа, а по датеотгрузки к примеру, а док загружен вводом остатков каким нибудь или реквизит самописный.
Я давно предлагал ввести генерацию ошибки на уровне платформы, но nobody_carer
   ЧессМастер
 
17 - 31.03.21 - 14:29
(0) А движения закрываются ?
Нет висящих остатков или движения только в плюс или минус ??
   Вафель
 
18 - 31.03.21 - 14:30
(17) даже если бы не закрывались, то остатков не может быть существенно больше движений
   NorthWind
 
19 - 31.03.21 - 14:41
(18) почему? Как я понимаю, одно незакрытое в ноль движение порождает по записи в каждый период, т.е. из одной записи движений может получиться столько записей итогов, сколько было периодов. Т.е. довольно много. Нет?
   OldCondom
 
20 - 31.03.21 - 14:49
(17)В тот то и дело, что нет. Висит одна запись от 2017 года. Но 150млн строк этого конечно не хватит.

Я видимо чего-то не понимаю. Если бы когда-то в лохматом году сделалась запись(+ или -) и больше по этой аналитике ничего, так я бы увидел это элементарно в запросе "выбрать * из РН.Товары.Остатки". Но там одна строка.

(18) Вот именно. И с этого факта я недоумеваю. Читаю уже ИТС и до сих пор не доходит, что пошло не так.
   H A D G E H O G s
 
21 - 31.03.21 - 14:51
(20) Разделение итогов включено?
   Ненавижу 1С
 
22 - 31.03.21 - 14:51
(12) спортивный интерес
   Ненавижу 1С
 
23 - 31.03.21 - 14:52
(11) это уже вкусовщина, мне больше нравится
        Если не Выборка.Следующий() Тогда
            Продолжить;
        КонецЕсли;
   OldCondom
 
24 - 31.03.21 - 14:56
(21) да
   OldCondom
 
25 - 31.03.21 - 15:02
разделение отключил, идет реструктуризация. Посмотрим, что будет.
   OldCondom
 
26 - 31.03.21 - 15:22
хех. Отключил разделение.
Итог: 5млн записей, 1.6Гб вес. Неплохо.
   Очевидно
 
27 - 31.03.21 - 15:57
(26) на самом деле "отключать" разделение - не обязательно.
Если верить ИТС : https://its.1c.ru/db/metod8dev/content/1393/hdoc
Нужно пересчитать итоги, и они должны сами свернуться...
   OldCondom
 
28 - 31.03.21 - 16:13
(27) да, читал эту статью сегодня.
Но по факту, когда сделал полный пересчет только по этому регистру, он увеличился еще на 20-30 гигов(точно не помню). Затем сделал truncate table и еще раз пересчет - вернулся в первоначальные 50Гб
   Злопчинский
 
29 - 31.03.21 - 16:15
ну, значит, не закрыт. запихнули че-нить вместо реквизита в измерение и всё... кури бамбук
   OldCondom
 
30 - 31.03.21 - 16:18
(29) возможно надо было начать с ТИИ, логическая целостность и битые ссылки, а потом пересчет. Может дело было в этом и правда.
 
 
   ЧессМастер
 
31 - 31.03.21 - 17:52
(18) >остатков не может быть существенно больше движений

Почему не может ?

Если ты сделаешь документ на сто тысяч строк с датой 01.01.2000 и без движений до текущей даты то у тебя движений будет сто тысяч строк а остатков сто тысяч на каждый период.

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

Проектирование регистра как с движениями только в одну сторону (только приход без расхода и наоборот) как и пропуск закрытия остатков по некоторым измерениям на экзамене является грубой ошибкой.
   Aleksey
 
32 - 31.03.21 - 17:59


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.