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

Откуда: Новосибирск
Сообщений: 108
Запускаю в Manadgment Studia запрос и вызываю там же хранимку, содержащую тот же самый запрос. И время выполнения в первом случае 0 сек, а во втором 35 сек.
Если в запросе из хранимки убрать сортировку ORDER BY opNum то время также становится 0 Сек (при выполнении запроса вне хранимки сортировка присутствует и время 0).
В чём может быть загвостка?

MS SQL 2005

Вызов хранимки:
EXEC	@return_value = [dbo].[Oper_SelectRequirementComponentsList]
		@divisionID = 129,
		@dateFrom = N'5.4.2014',
		@dateTo = N'1.1.2015',
		@requirementStutus = 1


Запрос:

declare @divisionID int
declare @dateFrom datetime 
declare @dateTo datetime 
declare @requirementStutus int

set @divisionID =129
set @dateFrom  = '5.4.2014'
set @dateTo  ='1.1.2015'
set @requirementStutus =1

	declare @divisionID_User int
		set @divisionID_User = dbo.UserDivisionID()
	

	SELECT         p.opNum, p.opDate, p.storeNum, p.opWho, Store.storeStore, p.toeID, p.zoneID, p.opMergeID, Zone.zoneName, p.divisionID, p.opType, p.requestNum, p.opLogical, 
                         t.divisionDiv
FROM            (SELECT        Oper.opNum, Oper.opDate, Oper.storeNum, Oper.opWho, Oper.toeID, Oper.zoneID, Oper.opMergeID, Oper.divisionID, Oper.opType, Oper.requestNum, 
                                                    Oper.opLogical
                          FROM            Oper INNER JOIN
                                                        (SELECT        MIN(opID) AS opID, SUM(opAmount) AS sumopAmount
                                                          FROM            Oper AS Oper_GROUP
                                                          WHERE       opType= case @requirementStutus when 1 then 4
														     when 2    then 2
															 end
															  AND (opLogical = 1) AND (toeID = 4)
                                                          GROUP BY opMergeID
                                                          HAVING         (SUM(opAmount) <> 0)) AS t ON t.opID = Oper.opID
                    where  Oper.opDate>= @dateFrom and Oper.opDate<=@dateTo   ) AS p INNER JOIN
                             (SELECT        divisionID, divisionDiv
                               FROM            Division	)
							    AS t ON p.divisionID = t.divisionID INNER JOIN
                         Store ON p.storeNum = Store.storeNum INNER JOIN
                         Zone ON p.zoneID = Zone.zoneID
ORDER BY opNum


Сообщение было отредактировано: 4 июн 14, 13:09
4 июн 14, 12:29    [16118135]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
навреное стоит посмотреть на планы с хранимкой и без ?
4 июн 14, 12:33    [16118177]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Soldat104
Member

Откуда: Новосибирск
Сообщений: 108
Maxx, план выполнения запроса

К сообщению приложен файл. Размер - 57Kb
4 июн 14, 12:46    [16118324]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Soldat104
Member

Откуда: Новосибирск
Сообщений: 108
Maxx, план выолнения хранимки

К сообщению приложен файл. Размер - 86Kb
4 июн 14, 12:47    [16118328]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
parapam
Guest
http://msdn.microsoft.com/en-us/library/ee343986
4 июн 14, 13:14    [16118597]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ну как минмум у вас типы данных разные ..у хранимки даты ето строка в запросе ,ето даты.
Приведиде сначала исходные условия к одним и темже ,памто перероверте. Но плданы разные,используються совершенно разные индексы
4 июн 14, 13:15    [16118608]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Soldat104
Member

Откуда: Новосибирск
Сообщений: 108
Изменение типа данных ни к чему не привело. Будем читать читать статейку.
4 июн 14, 13:20    [16118654]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
что савсем савсем ?
4 июн 14, 13:23    [16118681]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
_human
Member

Откуда:
Сообщений: 560
Soldat104
Изменение типа данных ни к чему не привело.

В теории должно стимулировать выбор одинакового плана выполнения.

Есть запрос который показывает параметризацию, правда не уверен что в 2005 будет все это работать.

SELECT qs.execution_count AS cnt, qt.text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.text LIKE N'%%' -- фильтр
ORDER BY qs.execution_count;
4 июн 14, 13:29    [16118735]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Soldat104
Member

Откуда: Новосибирск
Сообщений: 108
Стала 17 секунд выполняться хранимка
declare @dt1 datetime
declare @dt2 datetime
set @dt1=DATEADD(Month,-1,GETDATE())
set @dt2=GETDATE()

EXEC [dbo].[Oper_SelectRequirementComponentsList]
@divisionID = 129,
@dateFrom = @dt1,
@dateTo = @dt2 ,
@requirementStutus = 1


План остался тот же.
4 июн 14, 13:48    [16118916]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Glory
Member

Откуда:
Сообщений: 104760
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part2/
http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part3/
4 июн 14, 13:51    [16118950]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
o-o
Guest
Soldat104,

OPTION (RECOMPILE)
дописать пробовали? ОБОИM.
для процедуры заставит заново параметры прослушать,
и, главное, как раз в 2005-ом заставляло еще и в запросе переменные прослушать
4 июн 14, 13:58    [16119010]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
+переопределние параметров ,но ето есть в ссылках которые привел Glory
4 июн 14, 14:07    [16119074]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Soldat104
Member

Откуда: Новосибирск
Сообщений: 108
Спасибо. Рабочий день закончился. Буду завтра разбираться дальше.
4 июн 14, 14:17    [16119154]     Ответить | Цитировать Сообщить модератору
 Re: Разная скорость выполнения запроса и хранимой процедуры с темже запросом.  [new]
Mikebond
Member

Откуда: Киев
Сообщений: 32
Soldat104
Стала 17 секунд выполняться хранимка
declare @dt1 datetime
declare @dt2 datetime
set @dt1=DATEADD(Month,-1,GETDATE())
set @dt2=GETDATE()

EXEC [dbo].[Oper_SelectRequirementComponentsList]
@divisionID = 129,
@dateFrom = @dt1,
@dateTo = @dt2 ,
@requirementStutus = 1


План остался тот же.


1) Мне кажется нужно переносить значения параметров в локальные переменные (внутри) хранимки и дальше в запросах использовать их, а не использовать переменные для установки значений параметров. Пояснения - в статьях по ссылкам от Glory.
2) Несколько раз сталкивался со следующей проблемой - тормозила связка "Index seek" + "Key Lookup" несмотря на небольшое значение cost "Key Lookup". Решение следующее : в INCLUDE индекса по которому выполняется seek добавить поля которые возвращаются из "Key Lookup".
Удачи!
5 июн 14, 00:03    [16123170]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить