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

Откуда: Санкт-Петербург
Сообщений: 5489
Кто-нибудь сталкивался? Процедура работала около часа, профайлер показал гигантское количество чтений и ресурсов CPU. Вытащил запрос изнутри процедуры и запустил в менджмент студии отдельно. Отработало моментально. План запроса ничего необычного не показывает.

Переписал внутри процедуры на вызов динамического SQL. Заработало моментально. Что это было?

SELECT @@VERSION

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
5 май 16, 16:23    [19139098]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry V. Liseev
План запроса ничего необычного не показывает.

Какой именно план ? тот, который в процедуре или тот, который "запустил в менджмент студии отдельно" ?
5 май 16, 16:26    [19139122]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Dmitry V. Liseev,

parameter sniffing
5 май 16, 16:26    [19139126]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
Dmitry V. Liseev,

Скорее всего у вас два разных плана. Если вкратце:

1) Выполните в SSMS ровно тот-же вызов хранимки ,который долго работает, и который вы видите в профайлере
2) Если выполняется быстро, выполните в этом-же соединении SET ARITHABORT ON
3) Если снова быстро, выполните в этом-же соединении SET ARITHABORT OFF
4) Если всё равно быстро, копайте дальше, если медленно, как в приложении - смотрите с какими параметрами был скомпилирован запрос, и думайте как быть если для одного набора параметров подходит один план, а для другого - другой

Если долго, то объяснение всего этого в трёх частях здесь: http://www.somewheresomehow.ru/fast-in-ssms-slow-in-app-part1/
5 май 16, 16:36    [19139202]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5489
WarAnt
Dmitry V. Liseev,

parameter sniffing


Спасибо. То самое. Установка option (recompile) в запросе решило проблему. Можно закрывать.
5 май 16, 16:54    [19139314]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
Dmitry V. Liseev
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 5489
Glory
Dmitry V. Liseev
План запроса ничего необычного не показывает.

Какой именно план ? тот, который в процедуре или тот, который "запустил в менджмент студии отдельно" ?
тот, который "запустил в менджмент студии отдельно". Видимо, при исполнении изнутри процедуры использовался ранее закэшированный план, который был создан для других параметров, а в данном случае оказался резко неоптимален.
5 май 16, 16:56    [19139330]     Ответить | Цитировать Сообщить модератору
 Re: Запрос аццки тормозит внутри хранимой процедуры. Снаружи - мгновенно работает.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry V. Liseev
тот, который "запустил в менджмент студии отдельно"

А с чем вы его сравнивали то ? Для выясниения "подозрительности" ?
5 май 16, 16:58    [19139336]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить