Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Всем доброго дня и заранее спасибо за помощь.
Есть БД, есть внешнее приложение, которое получает данные "дергая" процедуры БД. В настоящее время к одним и тем же таблицам внешнее приложение обращается с использованием множества различных процедур. Вопрос - в чем принципиальное отличие, какие плюсы минусы и т.д. если объединить все однотипные процедуры в одной, тем самым увеличив количество запросов к одной и то же процедуре, но уменьшив количество процедур обращающихся к таблицам.

Буду благодарен как за подробное объяснение, так и просто за ссылки по теме.
27 авг 12, 12:13    [13068512]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
swaap
Member

Откуда:
Сообщений: 109
Гостюшка,

План запроса будет неоптимальный
27 авг 12, 12:15    [13068536]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Если две процедуры отличаются только селект листом и условиями выборки из одной и той же таблицы то в чем разница планов запроса ?
27 авг 12, 12:22    [13068600]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Гостюшка
Если две процедуры отличаются только селект листом и условиями выборки из одной и той же таблицы то в чем разница планов запроса ?
Это разные запросы, соответственно и планы разные.
27 авг 12, 12:30    [13068678]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Все это не имеет отношения к вопросу, хорошо пусть у них у всех будут разные запросы, но в общей массе этой разницей можно пренебречь, вопрос в другом, что хуже - множество обращений к одной и той же таблице от разных процедур или обращение от одной процедуры, но при это с увеличением количества обращений к ней самой ?
27 авг 12, 12:54    [13068927]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
aleks2
Guest
Гостюшка
Все это не имеет отношения к вопросу, хорошо пусть у них у всех будут разные запросы, но в общей массе этой разницей можно пренебречь, вопрос в другом, что хуже - множество обращений к одной и той же таблице от разных процедур или обращение от одной процедуры, но при это с увеличением количества обращений к ней самой ?


Безразлично.
27 авг 12, 13:00    [13068988]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
blest
Member

Откуда:
Сообщений: 554
Гостюшка
Все это не имеет отношения к вопросу, хорошо пусть у них у всех будут разные запросы, но в общей массе этой разницей можно пренебречь, вопрос в другом, что хуже - множество обращений к одной и той же таблице от разных процедур или обращение от одной процедуры, но при это с увеличением количества обращений к ней самой ?


Каким образом идет обращение к БД с клиента, какую технологию используете?
27 авг 12, 13:00    [13068999]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Внешнее приложение (среда отчетности) обращается к процедурам по ODBC. Что наводит меня на мысль о различии - возможное наличие кэша результата выполнения процедуры, в результате чего, потенциально, с использованием одной процедуры, может сократится католичество обращений к таблице (для двух схожих запросов), плюс как мне кажется должна быть разница между двумя запросами от разных процедур к таблице и двумя запросами от одной и той же.
27 авг 12, 13:19    [13069179]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
aleks2
Guest
Гостюшка
как мне кажется должна быть разница между двумя запросами от разных процедур к таблице и двумя запросами от одной и той же.

Креститься пробовали? Ишо святая вода и чтение "Отче наш..." помогают.
27 авг 12, 13:32    [13069319]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
Гостюшка
Внешнее приложение (среда отчетности) обращается к процедурам по ODBC. Что наводит меня на мысль о различии - возможное наличие кэша результата выполнения процедуры, в результате чего, потенциально, с использованием одной процедуры, может сократится католичество обращений к таблице (для двух схожих запросов), плюс как мне кажется должна быть разница между двумя запросами от разных процедур к таблице и двумя запросами от одной и той же.
Никакого кэширования на сервере результатов выполнения запросов нет.
"Лучшесть" или "Хужесть" одного запроса по сравнению с другим определяется количеством затрачиваемых на выполнение этих запросов ресурсов сервера. Количество этих самых ресурсов определяется планом выполнения. Но эти самые планы вас почему-то не интересуют.
27 авг 12, 13:33    [13069330]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Гостюшка
Что наводит меня на мысль о различии - возможное наличие кэша результата выполнения процедуры, в результате чего, потенциально, с использованием одной процедуры, может сократится католичество обращений к таблице (для двух схожих запросов)
Кеширования результатов запроса не было, нет и не будет.

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

Если говорить про сравнение одна процедура с двумя запросами VS две процедуры по одному запросу, то первый вариант быстрее за счёт двухкратного уменьшения количества вызовов от клиента к серверу. Но разница будет небольшая.
27 авг 12, 14:00    [13069609]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Поясню - есть N процедур, каждый из которых забирает одни и теже данные но с разными условиями выборки, теперь вместо них будет одна процедура запускаемая N раз. Сами по себе select'ы не изменятся, а значит не должен поменяться и план.
27 авг 12, 14:14    [13069701]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
alexeyvg

Если говорить про сравнение одна процедура с двумя запросами VS две процедуры по одному запросу, то первый вариант быстрее за счёт двухкратного уменьшения количества вызовов от клиента к серверу. Но разница будет небольшая.


Не совсем понял...процедуры находятся на сервере, а обращение идет от разных объектов клиентского приложения, щза счет чего уменьшение количества запросов ?
27 авг 12, 14:19    [13069735]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Внешнее приложение
Guest
Гостюшка
Внешнее приложение (среда отчетности) обращается к процедурам по ODBC. Что наводит меня на мысль о различии - возможное наличие кэша результата выполнения процедуры, в результате чего, потенциально, с использованием одной процедуры, может сократится католичество обращений к таблице (для двух схожих запросов), плюс как мне кажется должна быть разница между двумя запросами от разных процедур к таблице и двумя запросами от одной и той же.

не очень понял зачем склеенную процедуру запускать N раз, ну да ладно. (есть же юнион или во времянку можно собирать)

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

но общая картина не очень понятна; если каждый "фрагмент поиска" дергается с клиента, то простор для погони за производительностью гораздо шире чем рекомпайлы.

как вариант еще можно рассмотреть опять новую процу, но не склеенную из других, а вроде обертки над другими процами.
т.е. дергается один раз одна проца, которая внутри себя дергает другие маленькие процедурки.
(с поправкой на то что я все еще не очень понимаю что там происходит).
27 авг 12, 14:29    [13069823]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Гостюшка
Поясню - есть N процедур, каждый из которых забирает одни и теже данные но с разными условиями выборки, теперь вместо них будет одна процедура запускаемая N раз. Сами по себе select'ы не изменятся, а значит не должен поменяться и план.
То есть вместо разных условий выборки будет одно???

Ничего непонятно :-)
27 авг 12, 14:41    [13069925]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
blest
Member

Откуда:
Сообщений: 554
Гостюшка
Поясню - есть N процедур, каждый из которых забирает одни и теже данные но с разными условиями выборки, теперь вместо них будет одна процедура запускаемая N раз. Сами по себе select'ы не изменятся, а значит не должен поменяться и план.

Зачем одну процедуру в этом случае запускать N раз? Если для эксперимента, то тогда разницы не будет.
27 авг 12, 14:48    [13070003]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
UniqueNick
Member

Откуда: Москва
Сообщений: 42
blest
Гостюшка
Поясню - есть N процедур, каждый из которых забирает одни и теже данные но с разными условиями выборки, теперь вместо них будет одна процедура запускаемая N раз. Сами по себе select'ы не изменятся, а значит не должен поменяться и план.

Зачем одну процедуру в этом случае запускать N раз? Если для эксперимента, то тогда разницы не будет.


Что-то мне подсказывает, что "Сами по себе select'ы не изменятся" означает "список возвращаемых полей и объекты (таблицы), указанные в селекте, не изменятся", а не "скрипт выборки полностью, включая условия в where, не изменится" :)
27 авг 12, 14:52    [13070035]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Внешнее приложение,

ситуация такова, что в отделе разработки нет в настоящее время нормального инструмента командной разработки/проверки версий и т.д., текучка имеется, в результате каждый программист (>10) пишет что хочет и при этом зачастую повторяет то, что было сделано до него, появляется множество процедур либо частично либо полностью повторяющих друг друга (>200), при этом условно, все задачи внешнего приложения можно разбить на группы по таблицам к которым они обращаются/комбинации таблиц (<100). Вот и появилась идея написания унифицированных функций, в которая может выгрузить любой набор данных для любой комбинации условий в рамках одной таблицы/пары таблиц.

В результате все программирование сводится к работе с внешним приложением (оформление результата запроса).
27 авг 12, 15:10    [13070214]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35400
Блог
Если есть 2 одинковые процедуры, и их можно заменить одной, то это нужно сделать.
27 авг 12, 15:15    [13070271]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
alexeyvg
Гостюшка
Поясню - есть N процедур, каждый из которых забирает одни и теже данные но с разными условиями выборки, теперь вместо них будет одна процедура запускаемая N раз. Сами по себе select'ы не изменятся, а значит не должен поменяться и план.
То есть вместо разных условий выборки будет одно???

Ничего непонятно :-)


Было два условия выборки - одно на 3 столбца другое на 4 , теперь будет одно на 7, при этом если передается null, то условие игнорируется опускается.

UniqueNick
blest
пропущено...

Зачем одну процедуру в этом случае запускать N раз? Если для эксперимента, то тогда разницы не будет.


Что-то мне подсказывает, что "Сами по себе select'ы не изменятся" означает "список возвращаемых полей и объекты (таблицы), указанные в селекте, не изменятся", а не "скрипт выборки полностью, включая условия в where, не изменится" :)


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

UniqueNick
blest
пропущено...

Зачем одну процедуру в этом случае запускать N раз? Если для эксперимента, то тогда разницы не будет.


Что-то мне подсказывает, что "Сами по себе select'ы не изменятся" означает "список возвращаемых полей и объекты (таблицы), указанные в селекте, не изменятся", а не "скрипт выборки полностью, включая условия в where, не изменится" :)


Итоговая процедура будет объединять все where из предыдущих процедур. Нужно ограничить по столбцу - передаю значение, не нужно - null при этом в where что то вроде where @param_c1 is null or c1='value'
27 авг 12, 15:25    [13070366]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Гостюшка
alexeyvg
Если говорить про сравнение одна процедура с двумя запросами VS две процедуры по одному запросу, то первый вариант быстрее за счёт двухкратного уменьшения количества вызовов от клиента к серверу. Но разница будет небольшая.


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

Или вы вообще про что то другое...
27 авг 12, 15:32    [13070429]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
Гостюшка
Вот и появилась идея написания унифицированных функций, в которая может выгрузить любой набор данных для любой комбинации условий в рамках одной таблицы/пары таблиц.
Это безусловно изменит скорость, потому что запросы будут другие; скорее всего, изменит в сторону замедления, как это обычно бывает для запросов "для любой комбинации условий".
Гостюшка
Было два условия выборки - одно на 3 столбца другое на 4 , теперь будет одно на 7, при этом если передается null, то условие игнорируется опускается.
Ну что же вы тогда писали про "одинаковые" запросы? :-)

запросы
select * from tbl where name = 'A'
и
select * from tbl where name = 'B'
разные, для них могут формироваться разные планы и они могут выпоняться разное время, оно может отличаться в тыщу раз.

А у вас не то что значения фильтров, у вас текст запросов разный!

Стремление сделать унифицированный код - это очень хорошее, но это надо делать скорее на базе правильной модели данных, и тщательно продумывая схему такой унификации. Иногда очень полезно разделять код таких "одинаковых" процедур на разные процедуры.

Вы лучьше послушайте своих специалистов, не решайте сами.
Гостюшка
Итоговая процедура будет объединять все where из предыдущих процедур. Нужно ограничить по столбцу - передаю значение, не нужно - null при этом в where что то вроде where @param_c1 is null or c1='value'
Такое безболезненно пройдёт только при отсутствии данных.
27 авг 12, 15:42    [13070542]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
alexeyvg,

две одну за другой или одну но 2 раза =)
27 авг 12, 16:03    [13070772]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Внешнее приложение
Guest
Гостюшка,

это какая-то форма поиска и запрос типа "поиск неизвестно по каким параметрам"
или это абсолютно отдельные запросы для разных форм(окошек)/бизнес-сущностей просто источник (таблица) совпадает?
27 авг 12, 16:18    [13070946]     Ответить | Цитировать Сообщить модератору
 Re: Множество обращений к одной процедуре.  [new]
Гостюшка
Guest
Да какая глобальная разница разница между

select * from t1 where c1 = 'value'

и

set @p_c1 = 'value'
set @p_c2 = null
select * from t1 where (@p_c1 is null or c1 = @p_c1) and ((@p_c2 is null or c2 = @p_c2)) ?


Логично предположить что на форум я полез уже после того как пообщался со всеми...
27 авг 12, 16:19    [13070964]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить