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

Откуда:
Сообщений: 1389
Скажите пожалуйста, а при выполнении инструкции Alter proc происходит обновление плана выполнения процедуры?
или нужно делать рекомпиляцию руками?
Есть процедура, которую я обновил (избавился от if), сделал этой процедуре Alter
А после выполнения Alter proc обновится план выполнения самой процедуры?
31 мар 16, 12:05    [18999519]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

ни Create ни Alter план не строит и не сохраняет
31 мар 16, 12:07    [18999529]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
RMagistr2015
а при выполнении инструкции Alter proc происходит обновление плана выполнения процедуры?

нет

RMagistr2015
или нужно делать рекомпиляцию руками?

и как же вы делаете рекомпиляцию руками ?
31 мар 16, 12:09    [18999549]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
а при выполнении инструкции Alter proc происходит обновление плана выполнения процедуры?

нет

RMagistr2015
или нужно делать рекомпиляцию руками?

и как же вы делаете рекомпиляцию руками ?


Здравствуйте, Глори, последний вопрос очень хороший, поможет ли опция with recompile при вызове на выполнение процедуры однократно, т.е. если однократно выполнить код:

exec dbo.myproc with recompile


Так сработает? План выполнения обновится?
31 мар 16, 12:28    [18999677]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,
автор
Есть процедура, которую я обновил (избавился от if), сделал этой процедуре Alter

вы думаете что как бы вы не меняли процедуру, она будет выполнять всё по старому? План в вашем понимании это что? :)
31 мар 16, 12:31    [18999699]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
RMagistr2015
Так сработает? План выполнения обновится?

Вы не хотите сначала прочитать в хелпе про эту опцию запуска(а не обновления) процедуры ?
31 мар 16, 12:32    [18999704]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
komrad
Member

Откуда:
Сообщений: 5735
exec sp_recompile your_proc_name
31 мар 16, 12:33    [18999708]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
iljy
Member

Откуда:
Сообщений: 8711
RMagistr2015,

построение плана происходит при запуске процедуры, а не при создании или изменении. Более того, при повторных запусках планы могут быть перестроены, если сервер решит, что сохраненный план невалиден. А если процедура была изменена, то сохраненные однозначно становятся невалидными.
31 мар 16, 12:45    [18999791]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
o-o
Guest
RMagistr2015
Скажите пожалуйста, а при выполнении инструкции Alter proc происходит обновление плана выполнения процедуры?
или нужно делать рекомпиляцию руками?
Есть процедура, которую я обновил (избавился от if), сделал этой процедуре Alter
А после выполнения Alter proc обновится план выполнения самой процедуры?

как только вы запускаете ALTER PROC,
даже не изменив ни символа в коде,
план процедуры из кэша будет вынесен, если он вообще там был.

новый план будет построен при первом запуске EXEC myProc
и сохранен в кэше, если при создании процедуры не указана опция RECOMPILE.
а если указана, то и вовсе не будет сохранен.

и проверяется это запросом типа
select cp.usecounts, cp.cacheobjtype, cp.objtype, cp.plan_handle, st.text
from sys.dm_exec_cached_plans as cp
  cross apply sys.dm_exec_sql_text(cp.plan_handle) as st
where st.text like '%...%'
  and st.text not like '%sys.dm_exec_cached_plans%';
31 мар 16, 12:52    [18999846]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
o-o
RMagistr2015
Скажите пожалуйста, а при выполнении инструкции Alter proc происходит обновление плана выполнения процедуры?
или нужно делать рекомпиляцию руками?
Есть процедура, которую я обновил (избавился от if), сделал этой процедуре Alter
А после выполнения Alter proc обновится план выполнения самой процедуры?

как только вы запускаете ALTER PROC,
даже не изменив ни символа в коде,
план процедуры из кэша будет вынесен, если он вообще там был.

новый план будет построен при первом запуске EXEC myProc
и сохранен в кэше, если при создании процедуры не указана опция RECOMPILE.
а если указана, то и вовсе не будет сохранен.

и проверяется это запросом типа
select cp.usecounts, cp.cacheobjtype, cp.objtype, cp.plan_handle, st.text
from sys.dm_exec_cached_plans as cp
  cross apply sys.dm_exec_sql_text(cp.plan_handle) as st
where st.text like '%...%'
  and st.text not like '%sys.dm_exec_cached_plans%';


Спасибо, всё встало на свои места, теперь всё прояснилось
31 мар 16, 13:07    [18999958]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
RMagistr2015
Спасибо, всё встало на свои места, теперь всё прояснилось

Это все написано в хелпе

RECOMPILE
Forces a new plan to be compiled, used, and discarded after the module is executed. If there is an existing query plan for the module, this plan remains in the cache.

что вам помешало прочитать хелп ?
31 мар 16, 13:11    [18999989]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Glory
RMagistr2015
Спасибо, всё встало на свои места, теперь всё прояснилось

Это все написано в хелпе

RECOMPILE
Forces a new plan to be compiled, used, and discarded after the module is executed. If there is an existing query plan for the module, this plan remains in the cache.

что вам помешало прочитать хелп ?


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

-- Могу я поинтересоваться у Вас, вы как-нибудь боретесь с этим явлением, при изучении большого кол-ва нового материала?
31 мар 16, 13:45    [19000255]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
Glory
Member

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

вы имели на руках текст команды exec dbo.myproc with recompile и не смогли найти статью про execute и в ней описание RECOMPILE
О каком "большом количестве материала" вы говорите ?
31 мар 16, 13:49    [19000282]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
iljy
RMagistr2015,

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


К стати, вот что по этому поводу пишет автор книги:
Рассматривается процедура, в которой в зависимости от полученных параметров используется несколько запросов,т.е. при одних запросах будет выведен один селект, при других - другой. Всё это отруливается посредством операторов If..else

Таким образом после первого вызова хранимой процедуры на выполнение в ней обрабатывается ряд операторов IF..ELSE, после чего определяется запрос, подходящий для использования. К сожалению, данный запрос подходит только для данного конкретного вызова хранимой процедуры на выполнение (но не известно, на сколько часто аналогичная ситуация будет складываться в дальнейшем). После этого первого прогона при каждом вызове хранимой процедуры на выполнение будет вызываться другой запрос, подходящий с точки зрения выбранных на сей раз критериев, но по прежнему будет использоваться план запроса, сформированный перед первым прогоном хранимой процедуры. Иными словами, производительность запроса действительно будет не оптимальной

Сообщение было отредактировано: 1 апр 16, 06:53
1 апр 16, 04:32    [19002951]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
o-o
Guest
RMagistr2015
К стати

К чьей стати?
+ На ловца и зверь бежит...

RMagistr2015
но не известно, на сколько часто
... но по прежнему

Неизвестно, насколько часто
+ по-прежнему
3 ошибки в 2-ух предложениях
Приличные авторы в подзаборных издательствах не печатаются
Картинка с другого сайта.
1 апр 16, 08:08    [19003151]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
o-o,

То что я читаю - не секрет, вот название этой книги
"Вильямс - Программирование баз данных Microsoft SQL Server 2005 для профессионалов.2008"
1 апр 16, 08:24    [19003177]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
o-o
Guest
Я говорю, у переводчика с русским языком плохо, а набирала и вовсе троечница-прогульщица. Поди перлов в книге немерено, разве можно такое читать?
Это ж придется по корявенькой фразе самому додумывать, что в оригинале было...
Хотя я допускаю: кто не видит, что "кстати"-- наречие, тому, возможно, в самый раз
-----
iljy вам написал совсем не про то. План может быть инвалидирован по куче причин, удалили/построили нужный индекс, изменилась статистика и т.д., и уж конечно alter proc инвалидирует всегда. А ваша цитата про то, что при оптимизации не анализируются логические переходы в процедуре, равно как и не рассматривается переопределение параметра
1 апр 16, 09:20    [19003380]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015
iljy
RMagistr2015,

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


К стати, вот что по этому поводу пишет автор книги:
Рассматривается процедура, в которой в зависимости от полученных параметров используется несколько запросов,т.е. при одних запросах будет выведен один селект, при других - другой. Всё это отруливается посредством операторов If..else

Таким образом после первого вызова хранимой процедуры на выполнение в ней обрабатывается ряд операторов IF..ELSE, после чего определяется запрос, подходящий для использования. К сожалению, данный запрос подходит только для данного конкретного вызова хранимой процедуры на выполнение (но не известно, на сколько часто аналогичная ситуация будет складываться в дальнейшем). После этого первого прогона при каждом вызове хранимой процедуры на выполнение будет вызываться другой запрос, подходящий с точки зрения выбранных на сей раз критериев, но по прежнему будет использоваться план запроса, сформированный перед первым прогоном хранимой процедуры. Иными словами, производительность запроса действительно будет не оптимальной


Каша какая-то... Оценочный план будет содержать в себе все что есть в процедуре, вне зависимости от If Else, актуальный план будет содержать те ветки которые выполняются в конкретном вызове, ни больше ни меньше и хоть весь день дёргайте один вариант, при ином план не станет включать не использованые инструкции
1 апр 16, 09:45    [19003513]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015
пропущено...


К стати, вот что по этому поводу пишет автор книги:
Рассматривается процедура, в которой в зависимости от полученных параметров используется несколько запросов,т.е. при одних запросах будет выведен один селект, при других - другой. Всё это отруливается посредством операторов If..else

Таким образом после первого вызова хранимой процедуры на выполнение в ней обрабатывается ряд операторов IF..ELSE, после чего определяется запрос, подходящий для использования. К сожалению, данный запрос подходит только для данного конкретного вызова хранимой процедуры на выполнение (но не известно, на сколько часто аналогичная ситуация будет складываться в дальнейшем). После этого первого прогона при каждом вызове хранимой процедуры на выполнение будет вызываться другой запрос, подходящий с точки зрения выбранных на сей раз критериев, но по прежнему будет использоваться план запроса, сформированный перед первым прогоном хранимой процедуры. Иными словами, производительность запроса действительно будет не оптимальной


Каша какая-то... Оценочный план будет содержать в себе все что есть в процедуре, вне зависимости от If Else, актуальный план будет содержать те ветки которые выполняются в конкретном вызове, ни больше ни меньше и хоть весь день дёргайте один вариант, при ином план не станет включать не использованые инструкции


Как понять ваши слова - при ином план не станет включать не использованые инструкции?
Конкретизируйте пожалуйста
1 апр 16, 11:19    [19004040]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015
TaPaK
пропущено...


Каша какая-то... Оценочный план будет содержать в себе все что есть в процедуре, вне зависимости от If Else, актуальный план будет содержать те ветки которые выполняются в конкретном вызове, ни больше ни меньше и хоть весь день дёргайте один вариант, при ином план не станет включать не использованые инструкции


Как понять ваши слова - при ином план не станет включать не использованые инструкции?
Конкретизируйте пожалуйста

что вам мешает посмотреть
CREATE PROCEDURE dbo.TestIfPlan
	@Param int = 0
AS 

IF @Param = 0
	SELECT TOP 100 * FROM sysobjects

IF @Param = 1
	SELECT TOP 100 * FROM syscomments

GO


EXEC TestIfPlan @Param = 0

посмотрите estimated и actual plan
1 апр 16, 11:23    [19004065]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
o-o
Я говорю, у переводчика с русским языком плохо, а набирала и вовсе троечница-прогульщица. Поди перлов в книге немерено, разве можно такое читать?
Это ж придется по корявенькой фразе самому додумывать, что в оригинале было...
Хотя я допускаю: кто не видит, что "кстати"-- наречие, тому, возможно, в самый раз
-----
iljy вам написал совсем не про то. План может быть инвалидирован по куче причин, удалили/построили нужный индекс, изменилась статистика и т.д., и уж конечно alter proc инвалидирует всегда. А ваша цитата про то, что при оптимизации не анализируются логические переходы в процедуре, равно как и не рассматривается переопределение параметра


Какую книгу вы можете рекомендовать к прочтению?
1 апр 16, 14:42    [19005467]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104751
RMagistr2015
Какую книгу вы можете рекомендовать к прочтению?

хелп продукта
1 апр 16, 14:47    [19005508]     Ответить | Цитировать Сообщить модератору
 Re: Обновление процедуры  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
Glory
RMagistr2015
Какую книгу вы можете рекомендовать к прочтению?

хелп продукта


для ТС круг замкнулся, вопросы и тема неуместны
2 апр 16, 15:00    [19008740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить