Имя: Пароль:
1C
1С v8
Помогите проанализировать план запроса
,
0 SergeyKB
 
18.10.17
11:59
Всем привет

Из тех. журнала выдрал запрос
Запрос выполняется 1242 сек, соединяемые временные таблицы проиндексированы, основная временная нет

Смущает количество строк 565635284 в операторе Merge Join, в данных нет такого количества строк

51:46.301000-1242925996,DBMSSQL,6,process=rphost,p:processName=База,t:clientID=508,t:applicationName=1CV8C,t:computerName=VM-1C,t:connectID=53138,SessionID=16,Usr=Юзер,AppID=1CV8C,Trans=0,dbpid=83,Sql='SELECT
T1._Q_001_F_005RRef,
T1._Q_001_F_006,
T2._Q_001_F_001RRef,
T3._Q_001_F_001RRef,
T4._Q_001_F_001RRef
FROM #tt7 T1 WITH(NOLOCK)
LEFT OUTER JOIN #tt9 T2 WITH(NOLOCK)
ON (T1._Q_001_F_002 = T2._Q_001_F_000)
LEFT OUTER JOIN #tt11 T3 WITH(NOLOCK)
ON (T1._Q_001_F_003 = T3._Q_001_F_000)
LEFT OUTER JOIN #tt13 T4 WITH(NOLOCK)
ON (T1._Q_001_F_004 = T4._Q_001_F_000)
GROUP BY T1._Q_001_F_005RRef,
T1._Q_001_F_006,
T3._Q_001_F_001RRef,
T4._Q_001_F_001RRef,
T2._Q_001_F_001RRef
ORDER BY 1, 2',Rows=24120,RowsAffected=-1,planSQLText='
24120, 1, 1.24E+006, 0.0113, 115, 76, 4.02E+003, 1,   |--Sort(ORDER BY:([T1].[_Q_001_F_005RRef] ASC, [T1].[_Q_001_F_006] ASC))
24120, 1, 1.24E+006, 0, 3.82E+003, 76, 3.91E+003, 1,        |--Hash Match(Aggregate, HASH:([T1].[_Q_001_F_005RRef], [T1].[_Q_001_F_006], [T3].[_Q_001_F_001RRef], [T4].[_Q_001_F_001RRef], [T2].[_Q_001_F_001RRef]), RESIDUAL:([tempdb].[dbo].[#tt7].[_Q_001_F_005RRef] as [T1].[_Q_001_F_005RRef] = [tempdb].[dbo].[#tt7].[_Q_001_F_005RRef] as [T1].[_Q_001_F_005RRef] AND [tempdb].[dbo].[#tt7].[_Q_001_F_006] as [T1].[_Q_001_F_006] = [tempdb].[dbo].[#tt7].[_Q_001_F_006] as [T1].[_Q_001_F_006] AND [tempdb].[dbo].[#tt11].[_Q_001_F_001RRef] as [T3].[_Q_001_F_001RRef] = [tempdb].[dbo].[#tt11].[_Q_001_F_001RRef] as [T3].[_Q_001_F_001RRef] AND [tempdb].[dbo].[#tt13].[_Q_001_F_001RRef] as [T4].[_Q_001_F_001RRef] = [tempdb].[dbo].[#tt13].[_Q_001_F_001RRef] as [T4].[_Q_001_F_001RRef] AND [tempdb].[dbo].[#tt9].[_Q_001_F_001RRef] as [T2].[_Q_001_F_001RRef] = [tempdb].[dbo].[#tt9].[_Q_001_F_001RRef] as [T2].[_Q_001_F_001RRef]))
565635284, 1, 5.72E+008, 0.016, 83.1, 76, 85.8, 1,             |--Merge Join(Right Outer Join, MANY-TO-MANY MERGE:([T4].[_Q_001_F_000])=([T1].[_Q_001_F_004]), RESIDUAL:([tempdb].[dbo].[#tt7].[_Q_001_F_004] as [T1].[_Q_001_F_004]=[tempdb].[dbo].[#tt13].[_Q_001_F_000] as [T4].[_Q_001_F_000]))
23978, 1, 2.4E+004, 0.0846, 0.0265, 29, 0.111, 1,                  |--Clustered Index Scan(OBJECT:([tempdb].[dbo].[#tt13] AS [T4]), ORDERED FORWARD)
24161, 1, 2.44E+004, 0.0113, 1.64, 66, 2.52, 1,                  |--Sort(ORDER BY:([T1].[_Q_001_F_004] ASC))
24161, 1, 2.44E+004, 0, 0.211, 66, 0.876, 1,                       |--Hash Match(Right Outer Join, HASH:([T3].[_Q_001_F_000])=([T1].[_Q_001_F_003]), RESIDUAL:([tempdb].[dbo].[#tt7].[_Q_001_F_003] as [T1].[_Q_001_F_003]=[tempdb].[dbo].[#tt11].[_Q_001_F_000] as [T3].[_Q_001_F_000]))
149, 1, 149, 0.00313, 0.000321, 45, 0.00345, 1,                            |--Clustered Index Scan(OBJECT:([tempdb].[dbo].[#tt11] AS [T3]))
24161, 1, 2.44E+004, 0, 0.206, 63, 0.661, 1,                            |--Hash Match(Right Outer Join, HASH:([T2].[_Q_001_F_000])=([T1].[_Q_001_F_002]), RESIDUAL:([tempdb].[dbo].[#tt7].[_Q_001_F_002] as [T1].[_Q_001_F_002]=[tempdb].[dbo].[#tt9].[_Q_001_F_000] as [T2].[_Q_001_F_000]))
84, 1, 84, 0.00313, 0.000249, 44, 0.00337, 1,                                 |--Clustered Index Scan(OBJECT:([tempdb].[dbo].[#tt9] AS [T2]))
24145, 1, 2.41E+004, 0.425, 0.0267, 58, 0.451, 1,                                 |--Table Scan(OBJECT:([tempdb].[dbo].[#tt7] AS [T1]))
',Context='Форма.Вызов :

Направьте куда копать плиз
Спасибо.
1 H A D G E H O G s
 
18.10.17
12:02
В сторону xml-ного плана запроса.
2 SergeyKB
 
18.10.17
12:05
там ведь будет estimate plan
а actual без студии можно получить ?
3 H A D G E H O G s
 
18.10.17
12:06
Класса Statistic Profile
Вот там не будет "непонятных" количеств.
Вернее, там будет "непонятное" и фактическое количество.
4 H A D G E H O G s
 
18.10.17
12:06
(2) Нет. Если будете получать actual - ТЖ загнется.
5 H A D G E H O G s
 
18.10.17
12:06
Смотрите профайлером.
6 SergeyKB
 
18.10.17
12:07
(4) интересно ТЖ может поймать actual ?
7 SergeyKB
 
18.10.17
12:18
(0) до этого было 1500 сек. с оператором Parallelism
после установки в 0 Max DOP стало, что сейчас
8 H A D G E H O G s
 
18.10.17
12:27
(7) Ты пишешь странные вещи.
9 H A D G E H O G s
 
18.10.17
12:28
Max DOP=0 - это автоматический парралелизм.
Max DOP=1 - это отключение парралелизма.
Max DOP>1 - это ручной парралелизм.
10 SergeyKB
 
18.10.17
12:34
(8)
да сорри попутал, тупанул

было = 0, планы были с парралелизм-ом
сейчас 1, парралелизм из плана ушёл, время снизилось на ~300 сек. но легче от этого не стало
11 SergeyKB
 
18.10.17
12:36
(0)
попробую добавить индекс на основную таблицу, по 3-м соединяемым полям, возможно поможет
12 H A D G E H O G s
 
18.10.17
12:38
Хоть бы запрос 1с написал бы
13 SergeyKB
 
18.10.17
12:50
(12)
он простейший


|////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ДанныеДоговоры.Договор КАК Договор,
        |    ДанныеДоговоры.БюджетныйГод КАК БюджетныйГод,
        |    ТабЦФО.ЦФО,
        |    ТабСтатьи.Статья КАК СтатьяДвиженияДенежныхСредств,
        |    ТабПроекты.Проект
        |ИЗ
        |    ДанныеДоговоры КАК ДанныеДоговоры
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабЦФО КАК ТабЦФО
        |        ПО ДанныеДоговоры.SUBJECT_ID = ТабЦФО.SUBJECT_ID
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабСтатьи КАК ТабСтатьи
        |        ПО ДанныеДоговоры.EXPENSES_ID = ТабСтатьи.EXPENSES_ID
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабПроекты КАК ТабПроекты
        |        ПО ДанныеДоговоры.PROJECT_ID = ТабПроекты.PROJECT_ID
        |
        |СГРУППИРОВАТЬ ПО
        |    ДанныеДоговоры.Договор,
        |    ДанныеДоговоры.БюджетныйГод,
        |    ТабСтатьи.Статья,
        |    ТабПроекты.Проект,
        |    ТабЦФО.ЦФО
        |
        |УПОРЯДОЧИТЬ ПО
        |    Договор,
        |    БюджетныйГод
14 SergeyKB
 
18.10.17
12:51
ну и ест-но в пакетнике
все соединяемые таблицы индексированы
кроме основной
15 H A D G E H O G s
 
18.10.17
12:52
А как эти ВТ создаются?
16 Лефмихалыч
 
18.10.17
12:53
+(15) и которая из них больше, которая меньше
17 VS-1976
 
18.10.17
13:04
(13) В запросе идёт почти что перемножение вот по этому и множатся строки
18 Tateossian
 
18.10.17
13:16
(14) Таблицы не могут быть индексированными.
19 MrStomak
 
18.10.17
13:19
(0) В результате твоего Merge Join  565 миллионов строк.
Это связано, видимо, с ошибкой в условии соединения:
LEFT OUTER JOIN #tt13 T4 WITH(NOLOCK)
ON (T1._Q_001_F_004 = T4._Q_001_F_000)
- оно, видимо, почти всегда истинно. Потом это декартово произведение получившееся убирается группировкой
20 SergeyKB
 
18.10.17
13:20
(13)
Точно!
Спасибо!

(19)

Спасибо!
уже нашёл вариант ...

буду тестить
21 SergeyKB
 
18.10.17
13:20
(17)
Детская ошибка программера блин
22 SergeyKB
 
18.10.17
14:16
Спасибо всем за участие
Ветку можно закрывать