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


1С:Предприятие ::

Метки: 

Помогите проанализировать план запроса

Я
   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='Форма.Вызов :

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

|////////////////////////////////////////////////////////////////////////////////

        |ВЫБРАТЬ
        |    ДанныеДоговоры.Договор КАК Договор,
        |    ДанныеДоговоры.БюджетныйГод КАК БюджетныйГод,
        |    ТабЦФО.ЦФО,
        |    ТабСтатьи.Статья КАК СтатьяДвиженияДенежныхСредств,
        |    ТабПроекты.Проект
        |ИЗ
        |    ДанныеДоговоры КАК ДанныеДоговоры
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабЦФО КАК ТабЦФО
        |        ПО ДанныеДоговоры.SUBJECT_ID = ТабЦФО.SUBJECT_ID
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабСтатьи КАК ТабСтатьи
        |        ПО ДанныеДоговоры.EXPENSES_ID = ТабСтатьи.EXPENSES_ID
        |        ЛЕВОЕ СОЕДИНЕНИЕ ТабПроекты КАК ТабПроекты
        |        ПО ДанныеДоговоры.PROJECT_ID = ТабПроекты.PROJECT_ID
        |
        |СГРУППИРОВАТЬ ПО
        |    ДанныеДоговоры.Договор,
        |    ДанныеДоговоры.БюджетныйГод,
        |    ТабСтатьи.Статья,
        |    ТабПроекты.Проект,
        |    ТабЦФО.ЦФО
        |
        |УПОРЯДОЧИТЬ ПО
        |    Договор,
        |    БюджетныйГод
   SergeyKB
 
14 - 18.10.17 - 12:51
ну и ест-но в пакетнике
все соединяемые таблицы индексированы
кроме основной
   H A D G E H O G s
 
15 - 18.10.17 - 12:52
А как эти ВТ создаются?
   Лефмихалыч
 
16 - 18.10.17 - 12:53
+(15) и которая из них больше, которая меньше
   VS-1976
 
17 - 18.10.17 - 13:04
(13) В запросе идёт почти что перемножение вот по этому и множатся строки
   Tateossian
 
18 - 18.10.17 - 13:16
(14) Таблицы не могут быть индексированными.
   MrStomak
 
19 - 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)
- оно, видимо, почти всегда истинно. Потом это декартово произведение получившееся убирается группировкой
   SergeyKB
 
20 - 18.10.17 - 13:20
(13)
Точно!
Спасибо!

(19)

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

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



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует