Кэширование плана и первый запуск процедуры

Profiler2009
Дата: 02.02.2009 11:23:14
День добрый!
Пользователь периодически производит серию запусков (от одного до сотен) процедуры с разными параметрами. Первый запуск процедуры длится в несколько раз дольше чем последующие. По прошествии некоторого времени (неактивность пользователя) всё повторяется заново.
С помощью профайлера отследил запрос, который долго выполняется. При первом запуске происходит кэширование плана (событие Perfomance statistics) этого запроса, при последующих вызовах этой серии, кэширования нет.
Имеется ли способ преодалеть эту проблему (долгого первого выполнения)? Можно ли как-то указать, чтобы план этого запроса не удалялся из кэша? Или всё-такие текущий расклад более оптимален?
Возможно я еще что-то упустил, и причина долгого выполнения процедуры при первом вызове в чем-то другом, прошу направить в нужное русло.
Спасибо.

MS SQL Server 2005
Гавриленко Сергей Алексеевич
Дата: 02.02.2009 11:26:02
Кешируется не только план, но и данные.
Profiler2009
Дата: 02.02.2009 13:25:06
Имеется ввиду данные, которые вытягивает запрос?
т.е. тогда ничего сделать нельзя? пока данных в кэше нет, запрос будет выполняться медленнее
alex_bik
Дата: 03.02.2009 10:20:22
При "первом" запуске запроса SQL Server сохраняет прочитанные страницы данных в буффер (в память). При последующих запусках эти страницы уже читаются не с диска, а из памяти, засчет чего и получается такая разница в скорости. Если к страницам в буффере долгое время нет обращений, они вытесняются оттуда другими, более "свежими" данными. Насколько я помню, заставить SQL Server хранить страницы в буффере постоянно нельзя - то, как часто страницы вытесняются из буффера, зависит в основном от объема оперативки на сервере и интенсивности выполнения скриптов.
Дедушка
Дата: 03.02.2009 10:45:06
alex_bik
... Насколько я помню, заставить SQL Server хранить страницы в буффере постоянно нельзя ...

От чего же нельзя... можно:
pintable
вопрос в другом, нужно ли...
Glory
Дата: 03.02.2009 10:46:45
Дедушка
alex_bik
... Насколько я помню, заставить SQL Server хранить страницы в буффере постоянно нельзя ...

От чего же нельзя... можно:
pintable
вопрос в другом, нужно ли...


This functionality was introduced for performance in SQL Server version 6.5. DBCC PINTABLE has highly unwanted side-effects. These include the potential to damage the buffer pool. DBCC PINTABLE is not required and has been removed to prevent additional problems. The syntax for this command still works but does not affect the server.
Дедушка
Дата: 03.02.2009 10:50:07
Да, действительно, сори...
Сам ни когда не пользовался поэтому и не в курсе подробностей.

--------------------------------------------------------------
Дьявол кроется в деталях.
Profiler2009
Дата: 04.02.2009 10:09:37
Всем спасибо за ответы.
Выходит PINTABLE использовать нельзя и заставить страницы данных находится в кэше невозможно.. Как тогда быть?
А вообще как убедиться что проблема именно в этом? Какие классы событий луччше посмотреть в профайлере, и на какие атрибуты классов обратить внимание?
Glory
Дата: 04.02.2009 10:12:11
Profiler2009
Всем спасибо за ответы.
Выходит PINTABLE использовать нельзя и заставить страницы данных находится в кэше невозможно.. Как тогда быть?

Если счетчик cache hit ratio низкий, то добавлять памяти разумеется