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

Я уверен, что strtok возвращает указатель, который ссылается на тот первый аргумент, который, в вашем случае, является выделением стека. Я верю, что возвращение массива указателей на это выделение стека приведет к неопределенному поведению. Это может или не может быть причиной вашей проблемы. Это трудно понять, не видя больше кода. Чтобы протестировать, попробуйте изменить эту часть своего кода следующим образом:

void parse_cmd(char *retval[], char *cmd){
    char *tmp;
    char *a = strdup(cmd);
    int i = 0;

Прежде чем использовать его в производстве, вам нужно найти какой-то способ, чтобы убедиться, что вы освободили «a», иначе вы получите утечку. , Может быть, вы могли бы просто вернуть его вместо void и освободить его из другого места, или вы могли бы на самом деле strdup () каждый токен и написать функцию, чтобы освободить их всех или все, что работает для вас.

Если есть другие проблемы, они могут быть в другом коде. Я действительно не вижу здесь ничего плохого.

41
задан Dylan Corriveau 12 May 2015 в 14:05
поделиться

5 ответов

SET SHOWPLAN_ALL ON
GO

-- FMTONLY will not exec stored proc
SET FMTONLY ON
GO

exec yourproc
GO

SET FMTONLY OFF
GO

SET SHOWPLAN_ALL OFF
GO
45
ответ дан 27 November 2019 в 00:35
поделиться

При выполнении хранимой процедуры в SQL Management Studio 2008 вы можете щелкнуть Запрос -> Включить фактический план выполнения из меню ... его также на панели инструментов

После прочтения комментариев кажется, что выполнение является проблемой, и для ее решения я бы рекомендовал обернуть выполнение хранимой процедуры в транзакцию, откатывая ее в конце

3
ответ дан 27 November 2019 в 00:35
поделиться

Использовать

SET SHOWPLAN_ALL ON
Go
exec myStoredProc 234
GO
SET SHOWPLAN_ALL OFF
GO

См. http://msdn.microsoft.com/en-us/library/aa259203.aspx Пока вы не используете таблицы tmp, я думаю, что это будет работать

3
ответ дан 27 November 2019 в 00:35
поделиться

Запуск хранимой процедуры в Management Studio (или анализаторе запросов) с включенным показом фактического плана выполнения (из меню запросов) покажет вам план для хранимой процедуры после ее запуска. Если вы не можете запустить его, покажите примерный план выполнения (хотя по моему опыту это часто менее точно.)

0
ответ дан 27 November 2019 в 00:35
поделиться

Вы также можете использовать Profiler для просмотра плана выполнения. Вы захотите включить параметр «Производительность: Показать профиль статистики плана» и обязательно включите двоичные данные в свои столбцы.

Затем можно выполнить любой запрос или процедуру и просмотреть план выполнения.

Изменить

Если Вы не можете использовать профилировщик и не хотите открывать другое окно. Я предлагаю включить блок комментариев в начале ваших сохраненных процедур. Например, представьте следующее:

/* 
     Description: This procedure does XYZ etc...
     DevelopedBy: Josh
     Created On:  4/27/09

     Execution: exec my_procName N'sampleparam', N'sampleparam'
*/

ALTER PROCEDURE  my_procName
   @p1 nvarchar(20),
   @p2 nvarchar(20)

AS

Это позволяет вам выделять только цель выполнения и включать показывать план выполнения. И запустить его.

0
ответ дан 27 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: