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

Откуда:
Сообщений: 12
На сколько я понял процедура после создания компелируется один раз и все (если не стоит свойство чтобы постоянно компелировалась при вызове). Но с течением времени ведь данные накапливаются и план соответтвенно может меняться. Вопрос в следующем, стоит ли постоянно при запуске программы пересоздавать процедуру (программа многопользовательская соответственно в день она может пересоздаваться далеко не один раз в день), или проверять на наличие постоянно и например раз в месяц пересоздавать?
И еще если в момент пересоздания кто-то вызовет процедуру могут возниктуть проблемы?
До этого избегал процедур не хотел завязываться на БД, но тут приходится вынести кусок в отдельный блок в БД.
19 окт 15, 13:17    [18296699]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
o-o
Guest
нужные statement-ы в процедуре перекомпилируются, если чего-то изменяется,
а вы как думали?
ну был индекс, построили план с его учетом, раз, дропнули индекс, теперь что,
"всем гуд-бай, кина не будет"?
перекомпилирует заинтересованный statement и вперед.
то же самое при других изменениях схемы.
а кого вы собрались "проверять на наличие"?
19 окт 15, 13:25    [18296741]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
arSenya
Member

Откуда:
Сообщений: 12
параметр - "RECOMPILE показывает, что компонент Компонент Database Engine не кэширует план запроса для этой процедуры, что вызывает ее компиляцию при каждом выполнении. "

Проверять на наличие процедуру (в определенных бд ее может не быть по причине разных версий программы)
19 окт 15, 13:35    [18296808]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
o-o
Guest
BOL
There are times when procedure recompilation must be forced and other times when it occurs automatically.
Automatic recompiling occurs whenever SQL Server is restarted.
It also occurs if an underlying table referenced by the procedure has undergone physical design changes.

Recompile a Stored Procedure

BOL
By default, the query optimizer already updates statistics as necessary to improve the query plan;
in some cases you can improve query performance by using UPDATE STATISTICS
or the stored procedure sp_updatestats to update statistics more frequently than the default updates.

Updating statistics ensures that queries compile with up-to-date statistics.
However, updating statistics causes queries to recompile.
We recommend not updating statistics too frequently because there is a performance tradeoff
between improving query plans and the time it takes to recompile queries. The specific tradeoffs depend on your application.
UPDATE STATISTICS can use tempdb to sort the sample of rows for building statistics.

UPDATE STATISTICS (Transact-SQL)
19 окт 15, 13:39    [18296850]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
arSenya
Member

Откуда:
Сообщений: 12
Ну ок, я наверно не правильно понял когда читал про них. Просто где-то проскальзывала информация что с течением времени план может быть не оптимальным (может я ошибаюсь, поэтому собственно и решил спросить).
И еще тогда, зачем в в примерах во многих делается сначала DROP потом CREATE PROCEDURE ? Я думал это как-то с этим связано. Хотя возможно для актуальности ее
19 окт 15, 13:48    [18296916]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
o-o
Guest
arSenya
Просто где-то проскальзывала информация что с течением времени план может быть не оптимальным

конечно может быть.
допустим, индексы мы не дропаем и не создаем, а надеемся просто на то,
что если что-то поменялось в количестве нужных строк, то нас спасут актуальные статистики.
а они могут и не спасти.
их на тот момент могут просто не обновить, например.
SQL Server normally refreshes statistics once every 500 plus 20 percent of changes in the column
in question. Any data added after the statistics were last refreshed is not modeled by the statistics.
вот вы добавили в миллионную таблицу 100.000 строк, это мало для автоматического обновления.
а, допустим, ваш запрос выбирает строки как раз с теми значениями, что вставили.
и до этого нужных строк была 1 и годился поиск по индексу с лукапом куда-то.
а теперь у вас 100.001 нужная строка и вместо скана он будет продолжать делать поиск и лукап.
19 окт 15, 14:05    [18297070]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
o-o
Guest
arSenya
зачем в в примерах во многих делается сначала DROP потом CREATE PROCEDURE ?

это в каких именно примерах?
вообще, если я хочу процедуру поменять,
то или надо проверить, есть ли она, а потом сделать ALTER,
или удалить и заново создать.
но хоть я ее пересоздам, хоть я сделаю ALTER,
все равно план будет заново построен при первом вызове.
или у вас есть примеры, когда кто-то просто так методично дропает и пересоздает
не ради изменений, а просто ради уничтожения плана?
19 окт 15, 14:11    [18297121]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
arSenya
Ну ок, я наверно не правильно понял когда читал про них. Просто где-то проскальзывала информация что с течением времени план может быть не оптимальным (может я ошибаюсь, поэтому собственно и решил спросить).
И еще тогда, зачем в в примерах во многих делается сначала DROP потом CREATE PROCEDURE ? Я думал это как-то с этим связано. Хотя возможно для актуальности ее


ну, кое-кто так делает, возможно, чтобы наверняка(!) свежая, нетронутая, ненадёванная процедура была каждый раз
19 окт 15, 14:14    [18297147]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
arSenya
Member

Откуда:
Сообщений: 12
o-o,
ну да Alter тоже можно.
19 окт 15, 16:00    [18297865]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1976
arSenya
И еще тогда, зачем в в примерах во многих делается сначала DROP потом CREATE PROCEDURE ? Я думал это как-то с этим связано. Хотя возможно для актуальности ее


Речь про такую последовательность:

IF EXISTS...
DROP PROCEDURE...
go
CREATE PROCEDURE...

?

Это делается для того, чтобы не улететь в ошибку при попытке создания уже существующей процедуры / таблицы / индекса. Когда код создания объекта зашит внутрь процедуры, и Хаос знает - будет существовать создаваемый объект с таким именем или нет на момент выполнения кода в процедуре или нет - то рекомендую If Exists...Drop перед Create добавить.
20 окт 15, 13:31    [18302375]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DaniilSeryi
рекомендую If Exists...Drop перед Create добавить
Рекомендую делать по-другому
IF OBJECT_ID(N'ИмяПроцедуры','P') IS NULL
EXEC(N'CREATE PROC ИмяПроцедуры AS');
ALTER PROCEDURE ИмяПроцедуры .............. AS
...................................................................
20 окт 15, 13:36    [18302416]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
DaniilSeryi
рекомендую If Exists...Drop перед Create добавить
Рекомендую делать по-другому
IF OBJECT_ID(N'ИмяПроцедуры','P') IS NULL
EXEC(N'CREATE PROC ИмяПроцедуры AS');
ALTER PROCEDURE ИмяПроцедуры .............. AS
...................................................................
Извините. Ошибся. Перед ALTER надо, конечно, GO.
20 окт 15, 13:37    [18302424]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
StarikNavy
Member

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

>>Рекомендую делать по-другому
а из каких соображений?
20 окт 15, 13:52    [18302528]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
StarikNavy
iap,

>>Рекомендую делать по-другому
а из каких соображений?
Из многих. Хотя бы потому, что не слетают права.
20 окт 15, 13:53    [18302537]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Гавриленко Сергей Алексеевич
StarikNavy
iap,

>>Рекомендую делать по-другому
а из каких соображений?
Из многих. Хотя бы потому, что не слетают права.
И не существует такого момента, когда процедуры попросту нет.
В случае если она была, разумеется.
20 окт 15, 13:55    [18302560]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по процедурам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Представьте на секунду - вы сделали DROP PROC,
а связь с сервером бац - и оборвалась на несколько часов!
CREATE PROC не успел начаться.
20 окт 15, 13:57    [18302577]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить