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

Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Была проблема - при вызове хп из сишарпа долго отрабатывалась хп. Один из ДБА пофиксил проблему, которая описана тут - http://omnibuzz-sql.blogspot.com/2006/11/parameter-sniffing-stored-procedures.html , в кратце - это Parameter Sniffing.

Начальство сразу же решило что это панацея от всех бед и требует изменения всех ХП в соответствии с вышеприведенным issue (это будет мартышкин труд на пару месяцев).

Вопрос к знающим людям - проблему можно пофиксить только таким путем, или появилось что то интереснее? На форуме нашел заглохшую тему https://www.sql.ru/forum/actualthread.aspx?tid=227833&pg=-1&hl=parameter+sniffing , но там был 2к.

Заранее спасибо.
16 июн 09, 14:58    [7305478]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
Mayh
Guest
Забыл добавить - в моем случае это динамический запрос, то есть

Create procedure TestPrmSniffing
                @prmDate         varchar(100),
                @prmGroupBy varchar(100)
As

Declare @sql varchar(2000)
Set @sql = ‘Select ‘ + @prmGroupBy  + ‘, Count(1) from MyTable where TheDate = ‘ + @prmDate + ‘ group by ‘ + prmGroupBy
Exec (@sql)
go


заменяем на

Create procedure TestPrmSniffing
                @prmDate         varchar(100),
                @prmGroupBy varchar(100)
As

Declare @sql varchar(2000),
                @Date varchar(100),
                @GroupBy varchar(100)

Set @Date = @prmDate
Set @GroupBy = @prmGroupBy

Set @sql = ‘Select ‘ + @GroupBy  + ‘, Count(1) from MyTable where TheDate = ‘ + @Date + ‘ group by ‘ + GroupBy
Exec (@sql)
go



то есть екзекаем одну и ту же переменную @sql
16 июн 09, 15:18    [7305598]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mayh
Забыл добавить - в моем случае это динамический запрос, то есть

Тогда Parameter Sniffing не имеет никакого отношенения к вашей проблеме. Потому что динамический запрос будет компилироваться только на момент его выполнения. И в нем уже будут стоять константы, а не переменные. А тип переменной @sql на план выполнения никак не влияет
16 июн 09, 15:22    [7305628]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
Mayh
Guest
Glory
Mayh
Забыл добавить - в моем случае это динамический запрос, то есть

Тогда Parameter Sniffing не имеет никакого отношенения к вашей проблеме. Потому что динамический запрос будет компилироваться только на момент его выполнения. И в нем уже будут стоять константы, а не переменные. А тип переменной @sql на план выполнения никак не влияет


Спасибо за ответ.
16 июн 09, 15:25    [7305643]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
ererererer1
Guest
Глори правильно сказал - динамик sqд уже избавляет вас от параметер снифинг. для убедительности - можете планы сверить. вообще параметер сниффинг не панацея - используйте with recompile для запросов с атипичными параметрами
16 июн 09, 15:29    [7305661]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
не знаю почему автор статьи не написал, что у процедуры есть параметр with recompile... который как раз и предназначен на рекомпиляцию запросов с входящими параметрами у процедуры... тот же мартышкин труд, но поменьше...

для спящего время бодрствования равносильно сну
16 июн 09, 15:48    [7305769]     Ответить | Цитировать Сообщить модератору
 Re: Parameter Sniffing  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Mayh
Один из ДБА пофиксил проблему

может статистика пересчиталась. но тут надо сравнивать планы до и после и уже делать выводы.

для спящего время бодрствования равносильно сну
16 июн 09, 15:49    [7305782]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить