Есть ли у администратора базы данных способ узнать план выполнения длительного запроса в SQL Server 2000? Я знаю, как запустить SQL с помощью fn_get_sql (). И да, теоретически, если открыть новое соединение и установить одинаковые флаги среды, он должен сгенерировать такой же план для SQL. Однако я нахожусь в среде хранилища данных, и этот запрос выполнялся в течение 12 часов с промежуточной загрузкой данных, поэтому нет гарантии, что новый план будет соответствовать старому. Я просто хочу точно знать, что делает сервер.
И нет, я, конечно, не собираюсь убивать текущий выполняющийся оператор, если я не увижу план и не знаю наверняка, что я могу лучше справиться с указаниями индекса и присоединения.
ОБНОВИТЬ: Я чувствую себя так близко, но все же думаю, что это возможно. Это определенно можно сделать в 2K5 и новее. Если вы посмотрите на виртуальную таблицу syscacheobjects, то увидите идентификаторы объектов для каждого кэшированного плана. Вы можете вызывать методы sp_OA * для этих идентификаторов, но без знания объектной модели (которая является проприетарной) я никуда не денусь.





Я не думаю, что вы можете это сделать, его нужно отправить на сервер с исходным запросом:
http://msdn.microsoft.com/en-us/library/aa178303(SQL.80).aspx.
Вы можете загрузить запрос и получить предполагаемый план выполнения.
Нет, ты не можешь. Лучшее, что вы можете сделать, - это запустить DBCC INPUTBUFFER в процессе запроса и посмотреть, какой оператор выполнялся последним. Затем вы можете запустить это в анализаторе запросов и получить план выполнения.
Может быть...
Запустите профилировщик и разверните узел событий «производительности». Выберите один из вариантов SHOWPLAN.
Надеюсь, вам удастся поймать конец казни. Я знаю, что вы можете регистрировать планы запросов, но не знаю, работает ли это в данном случае.
У меня нет профилировщика SQL 2k, только 2k5, чтобы что-то протестировать или посмотреть варианты.