1

Установка:Копирование Хранится плана выполнения Proc на другой базе данных

Использование SQL Server 2008 R2.

У нас есть хранимая процедура, которая прерывисто работает очень долго. Я бы хотел протестировать теорию о том, что параметр sniffing заставляет механизм запроса выбирать плохой план.

Вопрос:

Как я могу скопировать планы выполнения в запросе из одной базы данных в другую базу данных (тест)?

Примечание:

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

ответ

3

планы не переносимы, они связываются с идентификаторами объектов. Вы можете использовать planguides, но они строго привязаны к базе данных. Что вам нужно сделать, это проверить восстановленную резервную копию той же базы данных. В восстановленной резервной копии вы можете использовать плагин. Но для релевантности физические характеристики машин должны быть одинаковыми (ЦП, ОЗУ, Диски).

Обычно, хотя вам не нужно прибегать к таким махинациям, как копировать планы. Глядя на реальные планы выполнения, все ответы прямо здесь.

+0

Делает смысл. Проблема в том, что эти ошибки происходят очень, очень редко. Фактические планы выполнения показывают мне, что все работает нормально, что является полным количеством битлов. В любом случае я могу запросить планы? –

+0

['sys.dm_exec_query_stats'] (http://msdn.microsoft.com/en-us/library/ms189741.aspx) –

1

Вы пытались использовать OPTIMIZE FOR пункт? С его помощью вы можете настроить свою процедуру проще и без риска, что план, который вы скопируете из другой базы данных, будет неуместным из-за различий в этих базах данных (если копирование плана даже возможно).

http://www.mssqltips.com/sqlservertip/1354/optimize-parameter-driven-queries-with-sql-server-optimize-for-hint/

+0

У меня нет, но спасибо за передачу этой информации. Я обязательно попробую это. Будет ли фактический план выполнения показывать различия, если я запускаю тот же запрос с двумя различными значениями переменных OPTIMIZE FOR? –

+0

Не во всех случаях, а в принципе да. Например, если у вас есть 10M строк, и ваш параметр используется для фильтрации индексированного столбца, где 1% значений - «A», а 99% значений - «B», тогда OPTIMIZE FOR «A» будет генерировать план с запросом индекса, и OPTIMIZE FOR 'B' даст вам сканирование. Но помните, что вам, вероятно, потребуется перекомпилировать вашу процедуру, чтобы изменения произошли. –