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

Откуда: С-Петербург
Сообщений: 616
Здравствуйте.
существует мнение что если работать с базой не запросами а через процедуры
то есть возможность съэкономить какие-то ресурсы
которые тратятся на компиляцию запросов и построение по ним планов
понимаю что теоретически оно конечно так, но
хочется получить какие-то количественные оценки этих излишне затрачиваемых ресурсов
конеретно у меня все делается запросами и проблем в общем нет
но теоретически можно придумать как все чохом переделать в виде процедур
хочется прикинуть стоит ли вообще париться
или может кто прикидывал такое уже и поделится опытом
в принципе я видел большую систему в которой все делается именно через процедуры
но и там встречались какие-то извращенные случаи
когда планы по какой-то процедуре со временем кривели и она начинала тупить
и там приделывали ловилку таких случаев и принудительную перекомпиляцию
в общем грабли можно найти при любом подходе, если хорошо постараться
13 мар 14, 15:14    [15718140]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
leov,

а в процедурах что? какое-то кодунство происходит? или там всё такие такие же запросы?

вопрос использования процедур в другой плоскости лежит, в методологии подходов
13 мар 14, 16:15    [15718681]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7871
Суть не в экономии, а в безопасности.
13 мар 14, 18:19    [15719743]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
StarikNavy,

ну там всякое происходит, обыкновенная работа
инсерты, удаления, селекты
тему безопасности конечно можно так решать
это если сервер куда-то в общественное пространство торчит
и используется система безопасности самого сервера
а у меня вебприложение и sql наружу не виден
так что я сам с безопасностью разбираюсь

мой вопрос в общем только про выигрыш ресурсов в процессе работы
он есть и его надо использовать или он несущественный
13 мар 14, 18:39    [15719843]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
запросы vs процедуры
Guest
Решать вам, но один из немаловажных плюсов использования процедур на сервере является возможность превратить sql сервер для приложения в чёрный ящик с заданными интерфейсами взаимодействия (процедурами), и при изменениях в структуре данных, которые не приводят к изменением входных/выходных данных процедур взаимодействия, исправления приходиться вносить только в tsql код.
13 мар 14, 18:48    [15719894]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
leov
Здравствуйте.
существует мнение что если работать с базой не запросами а через процедуры
то есть возможность съэкономить какие-то ресурсы
которые тратятся на компиляцию запросов и построение по ним планов

Здравствуйте. Это мнение очень спорное. Запросы и процедуры можно писать по разному, в зависимости от желания продемонстрировать ту или иную точку зрения, можно выдать одинаково плохие/хорошие результаты по любому из подходов.

Например:
1) Можно заспамить сервер однотипными, но довольно сложными для простой параметризации, запросами и забить кэш планов. Потом образом переписать все на процедуру с параметром, и чудесным образом получаем profit!
2) Обратная ситуация, есть процедура с то что называется запросом чувствительным к параметру (parameter sensitive). Работает стандартный механизм прослушивания параметров и выбирается неэффективный план, выглядит как "процедура работала нормально, а потом начала сильно тупить". Выдираем запрос из процедуры, а серверу посылаем запрос уже с константами, где нет параметризации и сервер строит нормальные планы, чудесным образом profit!

Вопросы:
Что мешало в случае
1) - параметризовать запрос на клиенте?
2) что мешало в случае 2 указать recompile, optimize for unknown, optimize for, разнести по if, динамика и т.д.

Все это решает проблемы.

Что касается факта компиляции - то без разницы, запрос это или процедура, все компилируется и все кэшируется (хотя, разумеется везде нюансы).

Так что принципиальный подход, имхо, зависит больше от выбранной архитектуры приложения.

Скажу сразу, лично мне ближе подход с ХП. Это дает определенную свободу и удобство. Заядлым ORM-щикам ближе другое, у них другое удобство, кому-то ближе третье и т.д.

leov
хочется прикинуть стоит ли вообще париться

Если ничего не беспокоит, то, имхо, не стоит.

leov
в принципе я видел большую систему в которой все делается именно через процедуры
но и там встречались какие-то извращенные случаи
когда планы по какой-то процедуре со временем кривели и она начинала тупить
и там приделывали ловилку таких случаев и принудительную перекомпиляцию
в общем грабли можно найти при любом подходе, если хорошо постараться

Ну вы последним предложением сами и ответили. Грабли всегда можно найти. Просто в той системе не умели бороться с прослушиванием параметров.
13 мар 14, 19:11    [15719986]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
SomewhereSomehow,

спасибо
я что-то в этом роде и подозревал, потому ничего в эту сторону и не делал
13 мар 14, 20:35    [15720309]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
leov
но теоретически можно придумать как все чохом переделать в виде процедур
хочется прикинуть стоит ли вообще париться
Разница в работе запросами или через процедуры в выделении уровня работы с СУБД.
Использование процедур даёт возможность работать с базой DBA или Database разработчику, либо начиная с самого процесса разработки, либо подключаясь при модификации в проценссе эксплуатации системы, при появлении каких то проблемах с производительностью, дедлоках, логических ошибок в управлении транзакциями и т.п.
Так что профит в производительности тут будет скорее косвенный - от возможности привлечения специалиста. Но может быть очень большой.

Есть один случай, когда использование процедур даёт серьёзный выйгрыш в производительности.
Если требуется делать длительную (на несколько стейтментов) транзакцию, то как правило разработчик клиента не парится, и управляет транзакцией с клиента, посылая серверу отдельные запросы. Соответственно время транзакции увеличивается на обмен "клиент-сервер", и время транзакции может возрасти в разы-десятка-сотни раз. Соответственно, реальная производительность системы во столько же раз уменьшится.

В остальном прямые батчи и батчи в процедуре ничем не отличаются, за исключением тонкостей, описанных SomewhereSomehow

ЗЫ - дописывал, увидел:
запросы vs процедуры
Решать вам, но один из немаловажных плюсов использования процедур на сервере является возможность превратить sql сервер для приложения в чёрный ящик с заданными интерфейсами взаимодействия (процедурами), и при изменениях в структуре данных, которые не приводят к изменением входных/выходных данных процедур взаимодействия, исправления приходиться вносить только в tsql код.
вот это и хотел сказать.
13 мар 14, 21:07    [15720403]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Хранимые функции. За и против
14 мар 14, 03:35    [15721448]     Ответить | Цитировать Сообщить модератору
 Re: запросы vs процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
Mnior
Хранимые функции. За и против
У ТС обсуждение другой темы - где лучше поместить одни и те же сиквельные запросы - в ХП или на клиенте. А в статье обсуждается, где разместить бизнес-логику.

Я уж не говорю, что статья сильно поверхностная (у нас тут были намного более глубокие обсуждения).
14 мар 14, 08:42    [15721644]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить