Имя: Пароль:
1C
1С v8
Подскажите по повторяющимся обращениям к регистру в запросе
0 Повелитель
 
10.10.13
10:59
Написал отчет, анализ продаж по 4 разным периодам. Работает хорошо, пока не начинают строить его в разрезе номенклатуры.
База размером 20 Гб, справочник номенклатура 130 000 позиции. Крутиться на MS SQL, типовая конфигурация "Управление торговлей для Казахстана", локализованная Российская версия.
Записей в регистре Продажи 2 413 646.
Запрос (в запросе все измерения регистра, тут убрал просто):

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала1, &ДатаКонца1, Регистратор, {(Номенклатура).* КАК Номенклатура}) КАК ПродажиОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала2, &ДатаКонца2, Регистратор, {(Номенклатура).* КАК Номенклатура}) КАК ПродажиОбороты
    ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала3, &ДатаКонца3, Регистратор, {(Номенклатура).* КАК Номенклатура}) КАК ПродажиОбороты
    ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНачала4, &ДатаКонца4, Регистратор, {(Номенклатура).* КАК Номенклатура}) КАК ПродажиОбороты

При его построении в разрезе номенклатуры, tempDB на SQL начинает расти до неприличных размеров (10 ГБ и более), тем самым загружая диск С, на 100%, и начинает тормозить вся база. Время построения не известно, ждал 30 минут, потом прервал.

Понимаю что неправильная логика запроса, но в чем ошибка? Что там такого на SQL происходит? При том что типовой отчет продажи, строиться с любыми группировками за любой период не более 5 минут.
1 Повелитель
 
10.10.13
11:27
подниму
2 Spieluhr
 
10.10.13
11:31
попробуйте каждый запрос - поместить во временную таблицу, а объединять в последнем запросе пакета
3 viktor_vv
 
10.10.13
11:32
А детализация до регистратора обязательно нужна ?
4 hhhh
 
10.10.13
11:32
наверно, слово регистратор не надо. Например в периоде 100000 регистраторов, понятно, что размер файла у вас увеличится в десятки тысяч раз.
5 el-gamberro
 
10.10.13
11:33
Посмотри план запроса. Так он не весь приведен.
Конечно и сама логика жутко кривая :)
Объединять надо несагрегированные массивы данных.

А насчет 4 периодов правильная логика:

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура, НАЧАЛОПЕРИОДА(ДатаПРодажи, Квартал)

Ну и потом уж 4 квартала по столбцам раскидать
6 dk
 
10.10.13
11:34
фильтр по номенклатуре задаешь?
7 el-gamberro
 
10.10.13
11:34
(4) Хз, идет джоин к каждой таблице регистратора или нет.
8 el-gamberro
 
10.10.13
11:37
Вот еще совет, напиши запрос без использования виртуальной таблицы. Это в любом случае понадобится чтобы запрос в профайлере отладить. Заодно и нагрузку на оптимизаторы снизит.
9 Fragster
 
модератор
10.10.13
11:38
зачем там регистратор?
10 viktor_vv
 
10.10.13
11:39
(7) Виртуальная таблица Обороты с периодичностью меньше месяца строится по реальной таблице движений.
Если нет обращений к реквизитам регистратора, то и джойнов не будет.
11 el-gamberro
 
10.10.13
11:40
(10) Ну так тему почитай. Человек кварталы объединяет.
12 viktor_vv
 
10.10.13
11:42
(10)+ Хотя даже в таком случае, не понятно какого рожна рстет tempDB. Глянуть бы во что там развернулось это хозяйство.
13 viktor_vv
 
10.10.13
11:43
(11) Читал. И спрашиваю, нахрена ему тогда регистратор в ВТ нужен.
14 1Сергей
 
10.10.13
11:44
Лёша! Нахрена там регистратор?
15 Повелитель
 
10.10.13
11:44
Да действительно Регистратор мне не нужен, уберу его. Может действительно только это решит проблему буду пробовать сейчас.
16 viktor_vv
 
10.10.13
11:45
(11) И таки насчет кварталов не вижу где в (0) про это написано. Только в (5).
17 Повелитель
 
10.10.13
11:47
(5) Не по кварталам у меня отчет строит.
Нужно например сравнить продажи за:
- январь 2010
- январь 2011
- январь 2012
- январь 2013
По сути можно сравнивать любые периоды между собой.

Временные таблицы не подойдут, так как все это строиться на базе Универсального отчета, стараюсь писать только на его основе.
18 Fragster
 
модератор
10.10.13
11:48
(17) переходи на СКД, там клево можно соединить наборы - один с периодами, второй - запрос по продажам
19 Повелитель
 
10.10.13
11:49
(18) Спасибо попробую
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший