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

Откуда: Москва
Сообщений: 1176
как рекомпилятся отдельные инструкции внутри процедур я понимаю, про причины тоже,
а вот что заставляет рекомпилить всю процедуру - нет.

В момент компиляции процедур висит ожидание аля "OBJECT: 7:522358445:0 [COMPILE]"
именно на самом вызове процедуры.

Профайлер ловит "SP:CacheInsert" c ObjectType = "8272 P"
Намного реже !!! он ловит SP:cacheMiss с тем же типом.

При этом отдельные иструкции рекомпилятся во всю, что понятно, там куча внешних времянок....
а где собсвенно прибитие процедуры в кеше, sp_CacheRemove не увидел

Разжуйте, плиз
21 мар 17, 14:39    [20317852]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
у меня тут нагрузочный тест.

при запуске 50 потоков. вижу на старте кучу событий CasheInsert, после чего все хорошо. никаких рекомпиляций.
а вот при запуске 100, уже все плохо)))
на сервер 12 цп
21 мар 17, 14:47    [20317887]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
та же была какая-то специфика с временными таблицами и размножением планов при паралельном выполнении?

ПС конекшен стринг одинаковый
21 мар 17, 14:50    [20317908]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
o-o
Guest
Mike_za
а вот что заставляет рекомпилить всю процедуру

1. 2000-ый сервер
2. exec with recompile
3. sp_recompile
4. create proc with recompile
5. different set options (another plan)
...
21 мар 17, 14:53    [20317921]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
все нет!
больше похоже на вытеснение из-за нехватки ресуров....
потому что оно множется)))
21 мар 17, 14:54    [20317928]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za
все нет!
больше похоже на вытеснение из-за нехватки ресуров....
потому что оно множется)))


"sp_CacheRemove не увидел"
т.е. он не выкидывает, а строит новый
21 мар 17, 14:57    [20317937]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
ну и если не хватает ресурсов для плана из кеша, будет строить новый дешевле и тп
21 мар 17, 14:57    [20317940]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
сонное царство

К сообщению приложен файл. Размер - 144Kb
21 мар 17, 14:59    [20317945]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

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

Counter Name Memory MB
|···Object Plans 943.98

вот его колбасит от 700 до 1000

это же как раз оно самое?
21 мар 17, 15:09    [20317992]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
на 50 потоках сей счетчик дрыгается на пару мегабайт всего
21 мар 17, 15:12    [20318004]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
TaPaK
Member

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

ну так там 3 варианта Compile/Recompile/Remove и вытеснять только что скомпилированные он скорее всего не будет(не успели устареть)
21 мар 17, 15:34    [20318143]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Mike_za
там куча внешних времянок....
В этом случае на каждую сессию создается свой план процедуры.
Вот кеш и распухает при сотне сессий.
21 мар 17, 15:42    [20318177]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
расскажите, про LCK_M_X при рекомпиляции вызываемой процедуры.
и кто кого реально ждет.

У меня сложилось ощущение, что пока процедура выполняется, ждущий поток не может построить себе новый план.
21 мар 17, 19:32    [20318958]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
invm
В этом случае на каждую сессию создается свой план процедуры.
+1
Начиная с SQL Server 7.0 использование внешних временных таблиц для структурирования кода стало невозможным, именно из за этого.
Mike_za
В момент компиляции процедур висит ожидание аля "OBJECT: 7:522358445:0 [COMPILE]"
Так что это за объект, уже посмотрели?
Как я понимаю, на время комиляции блокируется сама хранимая процедура.
21 мар 17, 19:45    [20318986]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Да, блоируется вызываемая процедура
21 мар 17, 21:23    [20319173]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Mike_za
расскажите, про LCK_M_X при рекомпиляции вызываемой процедуры.
https://support.microsoft.com/ru-ru/help/263889/description-of-sql-server-blocking-caused-by-compile-locks
21 мар 17, 21:41    [20319207]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
автор
В SQL Server планы выполнения состоят из следующих основных компонентов.
План запроса. Тело плана выполнения является реентерабельной структурой данных только для чтения, которую могут использовать пользователи в любом количестве. Оно называется планом запроса. План запроса не содержит контекста пользователя. В памяти содержится одна или две копии плана запроса (но не более): одна — для всех последовательных выполнений, а другая — для всех параллельных выполнений. Одна параллельная копия обслуживает все параллельные выполнения независимо от степени параллелизма.
Контекст выполнения. Для каждого пользователя, который в настоящий момент выполняет запрос, есть структура данных, относящихся к этому выполнению, например значения параметров. Эта структура данных называется контекстом выполнения. Структуры данных контекста выполнения являются повторно используемыми. Если пользователь выполняет запрос и одна из структур не используется, она повторно инициализируется контекстом нового пользователя


Ситуация с времянками к описанному не относится?
21 мар 17, 22:02    [20319254]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Mike_za
Ситуация с времянками к описанному не относится?
Да, не относится.
Описанное вообще не соответствует реальности. Планов одной процедуры в кеше может быть много.
21 мар 17, 22:26    [20319313]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
http://sqlblog.com/blogs/paul_white/archive/2012/08/17/temporary-object-caching-explained.aspx

Докину эту замечательную историю про кеш временных таблиц
21 мар 17, 23:45    [20319483]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
invm
Описанное вообще не соответствует реальности. Планов одной процедуры в кеше может быть много.
Это из официальной доки, но для версии 2005
https://technet.microsoft.com/ru-ru/library/ms181055(v=sql.105).aspx
22 мар 17, 00:23    [20319544]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
alexeyvg
Это из официальной доки, но для версии 2005
Утверждаемое неверно даже для 2005-го.
И в доках бывают ошибки.
22 мар 17, 11:15    [20320409]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
Mr. X
Guest
invm,

А где подвох-то?
22 мар 17, 12:52    [20320880]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
invm
alexeyvg
Это из официальной доки, но для версии 2005
И в доках бывают ошибки.
Это понятно, я просто показал, откуда эта цитата (не с сайтика "освоить программирование мышкой мейнфреймов за 3 дня").
invm
Утверждаемое неверно даже для 2005-го.
Это в общем не описание, а раздел статей, а они могут быть устаревшие...
Помню, что много планов для процедуры появилось не с самого начала, до этого было 2 плана, как там написано. Только не помню, с к какой версии.
22 мар 17, 13:08    [20320961]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
Mr. X
А где подвох-то?
Это вы о чем?
22 мар 17, 13:09    [20320966]     Ответить | Цитировать Сообщить модератору
 Re: кеш процедур  [new]
o-o
Guest
alexeyvg

Помню, что много планов для процедуры появилось не с самого начала, до этого было 2 плана, как там написано. Только не помню, с к какой версии.

т.е. вот прямо для уймы всевозможных set options было всего 2 плана?
это при том, что каждая сессия может себе выставить 7 вариантов datefirst,
все равно план будет 1 на всех???
22 мар 17, 13:27    [20321043]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить