Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос сваливается в скан, после update statistic работает минут 20 быстро. И опять scan  [new]
randrews
Member

Откуда:
Сообщений: 44
SQL 2000 !!!

Ребята, помогите, пожалуйста, разобраться.
Можно ли как-то зафиксировать план выполнения запроса, чтоб он не менялся?


Подробно:
Есть запрос, работал нормально, но с определенного момента времени начал сваливаться в scan.

Делаю update statistic или rebuild index - опять работает быстро. План становится таким
Execution Tree
--------------
Table Insert(OBJECT:(@LinesCompare), SET:(@LinesCompare.[AmmountWithNDS2]=[Expr1029], @LinesCompare.[AmmountWithNDS]=[Expr1028], @LinesCompare.[NDSAmount2]=[Expr1027], @LinesCompare.[NDSAmount]=[Expr1026], @LinesCompare.[NDSPercent2]=[Expr1025], @LinesCompare.[NDSPercent]=[Expr1024], @LinesCompare.[AmmountWithoutNDS2]=[Expr1023], @LinesCompare.[AmmountWithoutNDS]=[Expr1022], @LinesCompare.[Price2]=[Expr1021], @LinesCompare.[Price]=[Expr1020], @LinesCompare.[NettoWeight2]=[Expr1019], @LinesCompare.[NettoWeight]=[Expr1018], @LinesCompare.[GrossWeight2]=[Expr1017], @LinesCompare.[GrossWeight]=[Expr1016], @LinesCompare.[NumOfPlaces2]=[Expr1015], @LinesCompare.[NumOfPlaces]=[Expr1014], @LinesCompare.[InOnePlace2]=[Expr1013], @LinesCompare.[InOnePlace]=[Expr1012], @LinesCompare.[OrdNo]=[R].[OrdNo], @LinesCompare.[OrdNo2]=[T].[OrdNo], @LinesCompare.[ItemName]=[Expr1004], @LinesCompare.[ItemName2]=[Expr1005], @LinesCompare.[UOMCode]=[Expr1006], @LinesCompare.[UOMCode2]=[Expr1007], @LinesCompare.[UOM_OKEI]=[Expr1008], @LinesCompare.[UOM_OKEI2]=[Expr1009], @LinesCompare.[UOM_PackName]=[Expr1010], @LinesCompare.[UOM_PackName2]=[Expr1011]))
  |--Top(ROWCOUNT est 0)
       |--Compute Scalar(DEFINE:([Expr1004]=isnull([R].[ItemName], ''), [Expr1005]=isnull([T].[ItemName], ''), [Expr1006]=isnull([R].[UOMCode], ''), [Expr1007]=isnull([T].[UOMCode], ''), [Expr1008]=isnull([R].[UOM_OKEI], ''), [Expr1009]=isnull([T].[UOM_OKEI], ''), [Expr1010]=isnull([R].[UOM_PackName], ''), [Expr1011]=isnull([T].[UOM_PackName], ''), [Expr1012]=isnull([R].[InOnePlace], 0.00000000000000000000), [Expr1013]=isnull([T].[InOnePlace], 0.00000000000000000000), [Expr1014]=isnull([R].[NumOfPlaces], 0.00000000000000000000), [Expr1015]=isnull([T].[NumOfPlaces], 0.00000000000000000000), [Expr1016]=isnull([R].[GrossWeight], 0.00000000000000000000), [Expr1017]=isnull([T].[GrossWeight], 0.00000000000000000000), [Expr1018]=isnull([R].[NettoWeight], 0.00000000000000000000), [Expr1019]=isnull([T].[NettoWeight], 0.00000000000000000000), [Expr1020]=isnull([R].[Price], 0.00000000000000000000), [Expr1021]=isnull([T].[Price], 0.00000000000000000000), [Expr1022]=isnull([R].[AmmountWithoutNDS], 0.00000000000000000000), [Expr1023]=isnull([T].[AmmountWithoutNDS], 0.00000000000000000000), [Expr1024]=isnull([R].[NDSPercent], 0.00000000000000000000), [Expr1025]=isnull([T].[NDSPercent], 0.00000000000000000000), [Expr1026]=isnull([R].[NDSAmount], 0.00000000000000000000), [Expr1027]=isnull([T].[NDSAmount], 0.00000000000000000000), [Expr1028]=isnull([R].[AmmountWithNDS], 0.00000000000000000000), [Expr1029]=isnull([T].[AmmountWithNDS], 0.00000000000000000000)))
            |--Hash Match(Right Semi Join, HASH:(@Ord.[OrdNo])=([Expr1032]), RESIDUAL:([Expr1032]=@Ord.[OrdNo]))
                 |--Table Scan(OBJECT:(@Ord))
                 |--Compute Scalar(DEFINE:([Expr1032]=isnull([R].[OrdNo], [T].[OrdNo])))
                      |--Merge Join(Full Outer Join, MERGE:([T].[OrdNo], [T].[ItemCode], [T].[BK_Divide_Sufix_Torg])=([R].[OrdNo], [R].[ItemCode], [R].[BK_Divide_Sufix_Torg]), RESIDUAL:(([R].[OrdNo]=[T].[OrdNo] AND [R].[ItemCode]=[T].[ItemCode]) AND [R].[BK_Divide_Sufix_Torg]=[T].[BK_Divide_Sufix_Torg]))
                           |--Clustered Index Scan(OBJECT:(@Lines AS [T]), ORDERED FORWARD)
                           |--Clustered Index Scan(OBJECT:([antor_pre].[SAPPI].[TORG_Data_Lines].[TORG_Data_Lines_PK] AS [R]), ORDERED FORWARD)




Проходит какое то время - начинаются тормоза. И план становится таким
Execution Tree
--------------
Table Insert(OBJECT:(@LinesCompare), SET:(@LinesCompare.[AmmountWithNDS2]=[Expr1029], @LinesCompare.[AmmountWithNDS]=[Expr1028], @LinesCompare.[NDSAmount2]=[Expr1027], @LinesCompare.[NDSAmount]=[Expr1026], @LinesCompare.[NDSPercent2]=[Expr1025], @LinesCompare.[NDSPercent]=[Expr1024], @LinesCompare.[AmmountWithoutNDS2]=[Expr1023], @LinesCompare.[AmmountWithoutNDS]=[Expr1022], @LinesCompare.[Price2]=[Expr1021], @LinesCompare.[Price]=[Expr1020], @LinesCompare.[NettoWeight2]=[Expr1019], @LinesCompare.[NettoWeight]=[Expr1018], @LinesCompare.[GrossWeight2]=[Expr1017], @LinesCompare.[GrossWeight]=[Expr1016], @LinesCompare.[NumOfPlaces2]=[Expr1015], @LinesCompare.[NumOfPlaces]=[Expr1014], @LinesCompare.[InOnePlace2]=[Expr1013], @LinesCompare.[InOnePlace]=[Expr1012], @LinesCompare.[OrdNo]=[R].[OrdNo], @LinesCompare.[OrdNo2]=[T].[OrdNo], @LinesCompare.[ItemName]=[Expr1004], @LinesCompare.[ItemName2]=[Expr1005], @LinesCompare.[UOMCode]=[Expr1006], @LinesCompare.[UOMCode2]=[Expr1007], @LinesCompare.[UOM_OKEI]=[Expr1008], @LinesCompare.[UOM_OKEI2]=[Expr1009], @LinesCompare.[UOM_PackName]=[Expr1010], @LinesCompare.[UOM_PackName2]=[Expr1011]))
  |--Top(ROWCOUNT est 0)
       |--Compute Scalar(DEFINE:([Expr1004]=isnull([R].[ItemName], ''), [Expr1005]=isnull([T].[ItemName], ''), [Expr1006]=isnull([R].[UOMCode], ''), [Expr1007]=isnull([T].[UOMCode], ''), [Expr1008]=isnull([R].[UOM_OKEI], ''), [Expr1009]=isnull([T].[UOM_OKEI], ''), [Expr1010]=isnull([R].[UOM_PackName], ''), [Expr1011]=isnull([T].[UOM_PackName], ''), [Expr1012]=isnull([R].[InOnePlace], 0.00000000000000000000), [Expr1013]=isnull([T].[InOnePlace], 0.00000000000000000000), [Expr1014]=isnull([R].[NumOfPlaces], 0.00000000000000000000), [Expr1015]=isnull([T].[NumOfPlaces], 0.00000000000000000000), [Expr1016]=isnull([R].[GrossWeight], 0.00000000000000000000), [Expr1017]=isnull([T].[GrossWeight], 0.00000000000000000000), [Expr1018]=isnull([R].[NettoWeight], 0.00000000000000000000), [Expr1019]=isnull([T].[NettoWeight], 0.00000000000000000000), [Expr1020]=isnull([R].[Price], 0.00000000000000000000), [Expr1021]=isnull([T].[Price], 0.00000000000000000000), [Expr1022]=isnull([R].[AmmountWithoutNDS], 0.00000000000000000000), [Expr1023]=isnull([T].[AmmountWithoutNDS], 0.00000000000000000000), [Expr1024]=isnull([R].[NDSPercent], 0.00000000000000000000), [Expr1025]=isnull([T].[NDSPercent], 0.00000000000000000000), [Expr1026]=isnull([R].[NDSAmount], 0.00000000000000000000), [Expr1027]=isnull([T].[NDSAmount], 0.00000000000000000000), [Expr1028]=isnull([R].[AmmountWithNDS], 0.00000000000000000000), [Expr1029]=isnull([T].[AmmountWithNDS], 0.00000000000000000000)))
            |--Nested Loops(Left Semi Join, WHERE:(isnull([R].[OrdNo], [T].[OrdNo])=@Ord.[OrdNo]))
                 |--Concatenation
                 |    |--Nested Loops(Left Outer Join, WHERE:(([R].[OrdNo]=[T].[OrdNo] AND [R].[ItemCode]=[T].[ItemCode]) AND [R].[BK_Divide_Sufix_Torg]=[T].[BK_Divide_Sufix_Torg]))
                 |    |    |--Clustered Index Scan(OBJECT:([antor_pre].[SAPPI].[TORG_Data_Lines].[TORG_Data_Lines_PK] AS [R]))
                 |    |    |--Table Spool
                 |    |         |--Clustered Index Scan(OBJECT:(@Lines AS [T]))
                 |    |--Compute Scalar(DEFINE:([R].[OrdNo]=NULL, [R].[ItemName]=NULL, [R].[UOMCode]=NULL, [R].[UOM_OKEI]=NULL, [R].[UOM_PackName]=NULL, [R].[InOnePlace]=NULL, [R].[NumOfPlaces]=NULL, [R].[GrossWeight]=NULL, [R].[NettoWeight]=NULL, [R].[Price]=NULL, [R].[AmmountWithoutNDS]=NULL, [R].[NDSPercent]=NULL, [R].[NDSAmount]=NULL, [R].[AmmountWithNDS]=NULL))
                 |         |--Nested Loops(Left Anti Semi Join, OUTER REFERENCES:([T].[BK_Divide_Sufix_Torg], [T].[ItemCode], [T].[OrdNo]))
                 |              |--Clustered Index Scan(OBJECT:(@Lines AS [T]))
                 |              |--Clustered Index Seek(OBJECT:([antor_pre].[SAPPI].[TORG_Data_Lines].[TORG_Data_Lines_PK] AS [R]), SEEK:([R].[OrdNo]=[T].[OrdNo] AND [R].[ItemCode]=[T].[ItemCode] AND [R].[BK_Divide_Sufix_Torg]=[T].[BK_Divide_Sufix_Torg]) ORDERED FORWARD)
                 |--Table Spool
                      |--Table Scan(OBJECT:(@Ord))
24 янв 14, 14:24    [15462972]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сваливается в скан, после update statistic работает минут 20 быстро. И опять scan  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35080
Блог
randrews,

зафиксировать можно в свежих версиях,
попробуйте использовать подсказки соединений, если они есть в 2000
24 янв 14, 14:31    [15463011]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сваливается в скан, после update statistic работает минут 20 быстро. И опять scan  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Критик
зафиксировать можно в свежих версиях,
попробуйте использовать подсказки соединений, если они есть в 2000

да в 2000 можно писать полный тип соединения.
ТС - версию сервара полную..похоже что у вас 2 сп стоит и все
24 янв 14, 14:32    [15463022]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сваливается в скан, после update statistic работает минут 20 быстро. И опять scan  [new]
randrews
Member

Откуда:
Сообщений: 44
sp 3 стоит.
4-ю исторически не стали ставить - когда вышло обновление 4 SP все запросы стали в scan сваливтаься (на всех форумах помню был вой).
Сейчас попробовал сделать так (может поможет).
UPDATE STATISTICS SAPPI.TORG_Data_Lines WITH NORECOMPUTE


Буду ждать теперь час - следить за планом запросов.
24 янв 14, 14:37    [15463068]     Ответить | Цитировать Сообщить модератору
 Re: Запрос сваливается в скан, после update statistic работает минут 20 быстро. И опять scan  [new]
randrews
Member

Откуда:
Сообщений: 44
Не помогло :(
24 янв 14, 15:08    [15463302]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить