|
Стал тормозить запрос | ☑ | ||
---|---|---|---|---|
0
ber
01.12.16
✎
17:42
|
Простой запрос беру 2 Регистра накопления остатки на складах и резервы.
К Остатки соединяю с резервами левым соединением по номенклатуре. Запрос работал года 2 время выполнения около 1 с. Сейчас стал выполняться 40 минут, куда копать? Битых ссылок нет, делал реиндексацию средствами sql. |
|||
1
Волшебник
модератор
01.12.16
✎
17:42
|
Главное, никому не показывай запрос. Держись до последнего!
|
|||
3
ber
01.12.16
✎
17:45
|
Запрос совсем простой
ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.КоличествоОстаток, РезервыОстатки.КоличествоОстаток КАК КоличествоОстаток1 ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПАУЭР_Резервы.Остатки КАК РезервыОстатки ПО ТоварыНаСкладахОстатки.Номенклатура = РезервыОстатки.Номенклатура |
|||
4
Вафель
01.12.16
✎
17:46
|
статистика, реиндекс
|
|||
5
timurhv
01.12.16
✎
17:47
|
(3) Стали составными реквизиты?
|
|||
6
Волшебник
модератор
01.12.16
✎
17:47
|
жесть какая. Там же декартово произведение, ~10 тыс на ~10 тыс, т.е. 100 млн строк...
|
|||
7
ber
01.12.16
✎
17:48
|
(5) нет номенклатура не составной
|
|||
8
H A D G E H O G s
01.12.16
✎
17:50
|
Статистика, реиндекс. С запросом все нормально
|
|||
9
Cool_Profi
01.12.16
✎
17:50
|
(6) Почему?
ПО ТоварыНаСкладахОстатки.Номенклатура = РезервыОстатки.Номенклатура |
|||
10
timurhv
01.12.16
✎
17:52
|
(3) Разбей запрос по замерам, сперва остатки по РН.ТоварыНаСкладах, потом по РН.ПАУЭР_Резервы
|
|||
11
Вафель
01.12.16
✎
17:54
|
покажи план запроса
|
|||
12
ber
01.12.16
✎
17:57
|
(10)
Отдельно если выполняю все ок. меньше секунды. Сейчас пробую ре индекс средствами 1с на копии, отпишусь о результатах |
|||
13
h-sp
01.12.16
✎
17:59
|
(12) индекс есть по номенклатуре?
|
|||
14
H A D G E H O G s
01.12.16
✎
18:00
|
(13) Скорее всего - нет и не нужен.
|
|||
15
H A D G E H O G s
01.12.16
✎
18:01
|
(13) Или измерение - первое и индекс есть полюбому, но он - не поможет.
|
|||
16
h-sp
01.12.16
✎
18:02
|
(14) тогда действительно
ПО ТоварыНаСкладахОстатки.Номенклатура = РезервыОстатки.Номенклатура сравнение должно идти 10 тыс раз по каждой номенклатуре? |
|||
17
H A D G E H O G s
01.12.16
✎
18:02
|
(15) вернее, поможет частично, позволяя не выполнять сортировку при mergejoin
|
|||
18
Fragster
гуру
01.12.16
✎
18:02
|
он скукоживает по измерениям, т.е. по факту в (3) - соединение двух подзапросов
|
|||
19
Fragster
гуру
01.12.16
✎
18:03
|
а по факту проще всего заменить это на объединение с небольшим отбором и группировкой
|
|||
20
Мимохожий Однако
01.12.16
✎
18:04
|
Попробуй выгрузить остатки во временную таблицу, а при отборе резервов установить условие отбора по номенклатуре из временной таблицы и уже эту таблицу соединить в резервами
|
|||
21
H A D G E H O G s
01.12.16
✎
18:05
|
(18) Все время забываю про разделение итогов.
|
|||
22
Fragster
гуру
01.12.16
✎
18:06
|
(21) в данной ситуации он скукожит и без разделения итогов. Ну разве что если в регистре одно измерение, но я что-то в этом сильно сомневаюсь.
|
|||
23
mehfk
01.12.16
✎
18:08
|
(0) Характеристики номенклатуры используются? И что там со складами?
|
|||
24
mehfk
01.12.16
✎
18:08
|
и сколько строк в результате запроса?
|
|||
25
H A D G E H O G s
01.12.16
✎
18:21
|
(22) Да, точно.
Построил запрос. если номенклатура - не первая (нет индекса): по каждой таблице сначало индексный отбор по дате, потом идет группировка через хэш-таблицу, получается несколько сотен строк (ну у меня) свернутой номенклатуры и потом через hashjoin соединение. если номенклатура - первая (есть индекс): по каждой таблице сначало индексный отбор по дате, потом идет группировка через аггрегацию (хз как это физически делает sql), получается несколько сотен строк (ну у меня) свернутой номенклатуры и потом через mergejoin соединение. монопенисуально, есть ли индекс по номенклатуре. |
|||
26
H A D G E H O G s
01.12.16
✎
18:24
|
Ну и индексировать Номенклатуру смысла нет - план запроса остается как в (25), первый вариант, очевидно же.
|
|||
27
Fragster
гуру
01.12.16
✎
18:28
|
(25) ну, у автора, вероятно, что-то произошло и стал использоваться nested loops. можно упростить задачу оптимизатору, например через (19) или две временные таблицы
|
|||
28
H A D G E H O G s
01.12.16
✎
18:28
|
(27) Или посмотреть план.
|
|||
29
Fragster
гуру
01.12.16
✎
18:29
|
(28) посмотри в зеркало, потом на автора, потом снова в зеркало...
|
|||
30
H A D G E H O G s
01.12.16
✎
18:29
|
(27) тут 2 варианта - либо max_dop<>1 либо мертвая статистика.
|
|||
31
mehfk
01.12.16
✎
18:33
|
(23) - не актуально, тупанул.
|
|||
32
H A D G E H O G s
01.12.16
✎
18:36
|
(27) Там запрос то... Я пока не встречал случаев, когда бы слажал вложенный запрос в свертке остатков.
|
|||
33
H A D G E H O G s
01.12.16
✎
18:37
|
||||
34
ber
01.12.16
✎
22:33
|
Добавил индекс к номенклатуре в РН резервов.
Запрос заработал. Думаю это не лекарство а sql перестроил индексы целиком по этому регистру. Так же жду результатов Пересчета индексов целиком на копии базы. Позже отпишусь о результатах. |
|||
35
ber
01.12.16
✎
22:45
|
(34) >Добавил индекс к номенклатуре в РН резервов.
Не то написал не к номенклатуре а к измерению "Склад". в запросе его не использую, сделал это для эксперимента. |
|||
36
Лефмихалыч
01.12.16
✎
22:52
|
(3) он и должен тормозить. Раньше не тормозил потому. что данных не было
|
|||
37
ber
02.12.16
✎
11:40
|
(36) иногда лучше промолчать...
|
|||
38
Мимохожий Однако
02.12.16
✎
11:42
|
(37) Зря ты это.
(36)+1 |
|||
39
mehfk
02.12.16
✎
11:50
|
Почему зря?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |