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

Откуда:
Сообщений: 10
Здравствуйте,

У меня функция, см ниже

ALTER function [dbo].[FVS_SearchKladr_Step1](
  @ad nvarchar (255),
  @dklad char (2)
  )
returns char (13) as
begin
declare @klad char (13), @add nvarchar(255)
set @add = dbo.c_PurifyStr(@ad)
set @add = REPLACE(@add,'п ст','п/ст' ) 
 set @klad = null
    select   top 1 @klad = c.CODE    
              from FVS_Kladr c join
                  freetexttable (dbo.FVS_Kladr_view,NP,@add) t1 on c.Id = t1.[key] join 
                  freetexttable (dbo.FVS_Kladr_view,RG,@add) t2 on c.Id = t2.[key] join
                  freetexttable (dbo.FVS_Kladr_view,OB,@add) t3 on c.Id = t3.[key] 
                  
                  where @dklad = c.ObCode 
                  and @add like '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Ob)),'-','%'))+' '+c.ObPrz +
                               '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Rg)),'-','%'))+' '+c.RgPrz+
                               '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Np)),'-','%'))+' '+c.NpPrz+'%'                     
                 order by t1.[rank] desc, t2.[rank] desc, t3.[rank] desc
             option( OPTIMIZE FOR UNKNOWN )   
      return @klad         
end


Функция благодаря полнотекстовому поиску находит значение. Меня интересует опция, которую я установил - option( OPTIMIZE FOR UNKNOWN ), раньше при каждом запуске данной функции при разных входных параметрах в плане выполнения процедурного кэша менялось количество предлагаемых строк благодаря этой опции, но потом дернуло меня отключить у таблицы с полнотекстовыми индексами выключить стоп лист. После этого функция стала очень долго работать и в процедурном кэше как установилось одно количество предлагаемых строк, так и не меняется.

Если кто знает подскажите как мне вернуть работоспособность - option( OPTIMIZE FOR UNKNOWN ) ??

Заранее благодарю.
29 май 15, 14:36    [17706711]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Страно, OPTIMIZE FOR UNKNOWN должен перекомпилировать план, но этого почему то не происходит, как можно еще заставить функцию постоянно перекомпилироваться
29 май 15, 15:48    [17707336]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
F_V_S,

> как можно еще заставить функцию постоянно перекомпилироваться

вообще-то, для этого опция recompile есть.
29 май 15, 15:57    [17707379]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Но у меня не удалось ее в функцию засунуть(
29 май 15, 15:58    [17707385]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
F_V_S
Но у меня не удалось ее в функцию засунуть(


вот в эту функцию, которую вы привели? и в чем выразилось это "не удалось"?
29 май 15, 16:06    [17707433]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
daw,

Подчеркивает как синтаксическую ошибку, просто я сколько искал, так и не нашел как используется recompile с функциями, везде только про хранимки говориться, поэтому синтаксисом и не владею в данной ситуации.
29 май 15, 16:08    [17707444]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Glory
Member

Откуда:
Сообщений: 104751
F_V_S
Подчеркивает

Подчеркивает или выдает сообщение об ошибке при создании ?
29 май 15, 16:11    [17707457]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Glory,

Сообщение 195, уровень 15, состояние 1, процедура FVS_SearchKladr_Step1, строка 7
recompile не является известным параметр.
29 май 15, 16:18    [17707506]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Glory
Member

Откуда:
Сообщений: 104751
F_V_S
Сообщение 195, уровень 15, состояние 1, процедура FVS_SearchKladr_Step1, строка 7
recompile не является известным параметр.

Значит пришло время опубликовать select @@version
29 май 15, 16:20    [17707520]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
F_V_S
Glory,

Сообщение 195, уровень 15, состояние 1, процедура FVS_SearchKladr_Step1, строка 7
recompile не является известным параметр.


вы бы приводили то, что запускаете, если уж сами признаете, что со знанием синтаксиса у вас плохо.
29 май 15, 16:20    [17707525]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
daw,
create function [dbo].[FVS_SearchKladr_Step1](
  @ad nvarchar (255) ,
  @dklad char (2)
  )
returns char (13) 
with recompile
as
begin
declare @klad char (13), @add nvarchar(255)
set @add = dbo.c_PurifyStr(@ad)
set @add = REPLACE(@add,'п ст','п/ст' ) 
 set @klad = null
    select   top 1 @klad = c.CODE    
              from FVS_Kladr c join
                  freetexttable (dbo.FVS_Kladr_view,NP,@add) t1 on c.Id = t1.[key] join 
                  freetexttable (dbo.FVS_Kladr_view,RG,@add) t2 on c.Id = t2.[key] join
                  freetexttable (dbo.FVS_Kladr_view,OB,@add) t3 on c.Id = t3.[key] 
                  
                  where @dklad = c.ObCode 
                  and @add like '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Ob)),'-','%'))+' '+c.ObPrz +
                               '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Rg)),'-','%'))+' '+c.RgPrz+
                               '%'+dbo.c_PurifyStreet(replace(dbo.c_PurifyStr(ltrim(c.Np)),'-','%'))+' '+c.NpPrz+'%'                     
                 order by t1.[rank] desc, t2.[rank] desc, t3.[rank] desc
           OPTION (OPTIMIZE FOR UNKNOWN);        
      return @klad          
end
29 май 15, 16:21    [17707532]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Glory,

Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0 (X64) Jul 9 2014 16:04:25 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
29 май 15, 16:23    [17707539]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
F_V_S,

я имел в виду опцию запроса recompile - такую же как optimize for unknown.

...
order by t1.[rank] desc, t2.[rank] desc, t3.[rank] desc
             option(recompile)  
29 май 15, 16:23    [17707545]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Glory
Member

Откуда:
Сообщений: 104751
F_V_S
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0

И вы в хелпе нашли описание create function ... with recompile ?
29 май 15, 16:28    [17707570]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Glory,

Нет, предположил, что это приемлемо так же как и для хранимок.
29 май 15, 16:31    [17707580]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
daw,

option(recompile) - работает, но в отличии от option( OPTIMIZE FOR UNKNOWN ) время выполнения увеличилось(
29 май 15, 16:32    [17707589]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Glory
Member

Откуда:
Сообщений: 104751
F_V_S
Нет, предположил, что это приемлемо так же как и для хранимок.

Поздравляю.
29 май 15, 16:33    [17707593]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
F_V_S
Member

Откуда:
Сообщений: 10
Glory,

да не с чем
29 май 15, 16:36    [17707604]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Glory
Member

Откуда:
Сообщений: 104751
F_V_S
Glory,

да не с чем

Как в анекдоте - Жаль, что пациент умер, а то у меня еще столько идей было.
29 май 15, 16:37    [17707607]     Ответить | Цитировать Сообщить модератору
 Re: Перестала работать опция  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Рекомпиляция просто удаляет планы запросов и создает их заново. FOR UNKNOWN перерастало работать потому, что в Ваших данных изменилось усреднённое статистическое распределение на "невыгдное" для ожидаемого результата применённого фильтра. Анализируйте план выполнения.
29 май 15, 16:41    [17707622]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить