![]() |
|
Подскажите по повторяющимся обращениям к регистру в запросе | ☑ | ||
---|---|---|---|---|
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) Спасибо попробую
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |