[MS SQL 2000] Разный Execution plan для одного и того же кода.

klyv

При выполнении запроса из хранимой процедуры, запрос длится во много раз дольше, чем при выполнении из отдельного запроса.
Проблема возникает при добавлении одного JOIN'а. Почему-то при запуске отдельного запроса работает Bookmark lookup, и работает быстро, а в хранимой процедуре - Hash match, после которого Index scan, который и занимает всё время работы.
Не сталкивался ли кто-нибудь с подобной проблемой и не знает ли, как её решить?

psm-home

Вот тут товарищ похожую фигню описывает, вроде как объясняет это кешированием однажды выбранного плана выполнения. web page Если план все равно выбирается при каждом запуске разный, в зависимости от данных, то можно попробовать запретить кеширование планов, указав при создании SP опцию WITH RECOMPILE, хз насколько это просадит производительность. Еще разные планы могут выбираться из за того, что заданы отличающиеся наборы опций через SET чототам.

klyv

реакция одна и та же и в MSDN Community.
нет, это не из-за parameter sniffing. Я меняю процедуру, потом запускаю снова и первый же запуск имеет не такой execution plan, как тоже самое, но отдельным запросом.

psm-home

Опции сессии точно одинаковые в обоих случаях? Если посмотреть для Query Analyzer с помощью dbcc useroptions, а для хранимки с помощью @@options, например как тут web page описано, опции совпадают?

klyv

вставил и в запрос, и в процедуру select @@options. выдаёт одно и то же.
Оставить комментарий
Имя или ник:
Комментарий: