|
Помогите проанализировать план запроса | ☑ | ||
---|---|---|---|---|
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
|
Спасибо всем за участие
Ветку можно закрывать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |