2008-09-23 2 views
8

У меня есть хранимая процедура, состоящая из одного запроса выбора, который используется для вставки в другую таблицу на основе некоторой младшей математики, которая выполняется с аргументами в процедуре. Могу ли я генерировать план, используемый для этого запроса, каким-то образом ссылаясь на процедуру, или мне нужно скопировать и вставить запрос и создать переменные связывания для входных параметров?Объяснить план запроса в хранимой процедуре

ответ

7

Использование SQL Trace and TKPROF. Например, откройте SQL * Plus, а затем выдать следующий код: -

alter session set tracefile_identifier = 'something-unique' 
alter session set sql_trace = true; 
alter session set events '10046 trace name context forever, level 8'; 

select 'right-before-my-sp' from dual; 
exec your_stored_procedure 

alter session set sql_trace = false; 

После того, как это было сделано, посмотрите в каталоге UDUMP вашей базы данных для TRC-файла с «чем-то уникальным» в имени файла. Отформатируйте этот файл TRC с помощью TKPROF, а затем откройте форматированный файл и найдите строку «right-before-my-sp». Команда SQL, выданная вашей хранимой процедурой, должна быть вскоре после этого раздела, и немедленно под этим оператором SQL будет план для оператора SQL.

Edit: Для целей полного раскрытия, я должен поблагодарить всех тех, кто дал мне ответы на this thread на прошлой неделе, что помогли мне узнать, как это сделать.

+0

Отличный ответ Майк. Спасибо за совет. – 2008-09-23 18:43:10

1

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

Текущий ответ НЕТ, вы не можете запустить его против proc, и вы должны запускать его против самих отдельных утверждений. Трудно, когда у вас есть переменные и вычисления, но так оно и есть.

1

Многие инструменты, такие как Toad или SQL Developer, будут запрашивать значения привязки при выполнении плана объяснения. Вам придется делать это вручную в SQL * Plus или других инструментах.

Вы также можете включить трассировку SQL и выполнить хранимую процедуру, а затем извлечь план объяснения из файла трассировки.

Будьте осторожны, чтобы вы не просто получили план объяснения для инструкции SELECT. Наличие предложения INSERT может изменить цель оптимизатора из первых строк во все строки.

Смежные вопросы