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

Откуда: Berlin
Сообщений: 185
В документации написано, что sp_executesql создает план выполнения, который с большой вероятностью будет использоваться повторно. А как насчет запросов которые полностью формируются в приложении?
Например
SELECT Value 
FROM someView
WHERE ID1 = 'значение1'
  AND ID2 = 'значение2' 
Будет ли план использоваться повторно, если значение1 и значение2 постоянно меняются?
7 сен 11, 15:38    [11241753]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и планы выполнения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
edyaN
В документации написано, что sp_executesql создает план выполнения, который с большой вероятностью будет использоваться повторно. А как насчет запросов которые полностью формируются в приложении?
Например
SELECT Value 
FROM someView
WHERE ID1 = 'значение1'
  AND ID2 = 'значение2' 
Будет ли план использоваться повторно, если значение1 и значение2 постоянно меняются?
В новых версиях сиквела распознаются такие случаи и план может использоваться повторно, хотя и не всегда на 100% точно.
http://msdn.microsoft.com/ru-ru/library/ms175580.aspx

Однако для конкретно вашего запроса план не будет использован, т.к. вы зачем то не указываете владельца.
http://msdn.microsoft.com/ru-ru/library/ms181055.aspx

Если это не продиктовано какой то специальной логикой, рекомендую указывать, тем более что это ещё дополнительно повысит скорость запроса.
7 сен 11, 15:48    [11241881]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и планы выполнения  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
edyaN,

если у вас достаточно простые запросы, то скорее всего SQL Server догадается параметризовать их автоматически. И будет использовать один и тот же план в котором будут использоваться параметры, хотя значения и будут отличаться. Параметризацией можно управлять. Почитайте более подробно про параметризацию тут.
7 сен 11, 15:50    [11241903]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и планы выполнения  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
alexeyvg,
SomewhereSomehow,

Спасибо за напоминание про владельца и ссылки.
А теперь практика:
есть база небольшой телефонной компании, нагрузка ок 250 запросов в сек. Отношение счетчиков производительности
SQLStatistics:Batch Requests/sec и SQLStatistics:SQL Compilations/sec примерно 3:1, то есть примерно каждый третий запрос перекомпилируется. Если я неправ, то дальше можно не читать :)

Запросы в основном простые и в большей части выполняются через функции/процедуры, то есть параметризация имеется по определению. При этом загрузка 8 процессоров от 40 до 80%. Я предполагаю, что такая большая загрузка именно от частой перекомпиляции запросов, в связи с чем необходимо изменить приложение таким образом, чтобы в тех местах, где не используются функции/процедуры, использовались параметризированные запросы.
Верны ли мои рассуждения и если нет, то в чем я заблуждаюсь?

SQL Server 2005
7 сен 11, 17:24    [11242896]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и планы выполнения  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31986
edyaN
Запросы в основном простые и в большей части выполняются через функции/процедуры, то есть параметризация имеется по определению. При этом загрузка 8 процессоров от 40 до 80%. Я предполагаю, что такая большая загрузка именно от частой перекомпиляции запросов
Да, похоже, хотя может запросы процессороёмкие? Может, вы там широко используете функции, например?
Или, может, нагрузка процессора не от множества простых запросов, а от каких то сложных?

Желательно всё это профайлером посмотреть...

edyaN
в связи с чем необходимо изменить приложение таким образом, чтобы в тех местах, где не используются функции/процедуры, использовались параметризированные запросы.
Я думаю, так будет лучьше.
7 сен 11, 17:44    [11243088]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql и планы выполнения  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
alexeyvg
edyaN
Запросы в основном простые и в большей части выполняются через функции/процедуры, то есть параметризация имеется по определению. При этом загрузка 8 процессоров от 40 до 80%. Я предполагаю, что такая большая загрузка именно от частой перекомпиляции запросов
Да, похоже, хотя может запросы процессороёмкие? Может, вы там широко используете функции, например?
Или, может, нагрузка процессора не от множества простых запросов, а от каких то сложных?

Желательно всё это профайлером посмотреть...


я в своё время пытался профайлером... вобщем, когда профайлер пытается создать трассу, то на это уходит секунд 10, на это время интерфейс замирает, а когда размораживается, то там уже две-три тысячи событий и тут главное успеть остановить трассу, поскольку сеть полностью забивается или еще что-то происходит, но сервер перестает отвечать после этого пару минут. Понятно, то проблема в правильных фильтрах, но экпериментировать на продуктивном сервере мне больше не кажется хорошей идеей. Вот так и работаем вслепую, по приборам, точнее по датчикам.

Вобщем спасибо, будем параметризировать.
7 сен 11, 18:01    [11243277]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить