как создать план объяснения для всей хранимой процедуры - PullRequest
6 голосов
/ 22 декабря 2010

Я обычно генерирую планы объяснения, используя в sqlplus следующее:

SET AUTOTRACE ON
SET TIMING ON
SET TRIMSPOOL ON
SET LINES 200
SPOOL filename.txt
SET AUTOTRACE TRACEONLY;

{query goes here}

SPOOL OFF
SET AUTOTRACE OFF

Но что, если я хочу сгенерировать план объяснения для хранимой процедуры?

Есть ли способ создать объяснениепланировать всю хранимую процедуру?ИП не имеет входных / выходных параметров.

Ответы [ 2 ]

7 голосов
/ 22 декабря 2010

То, что вы генерируете, правильно называется «планом выполнения». «Объяснить план» - это команда, используемая для генерации и просмотра плана выполнения, как это делает AUTOTRACE TRACEONLY в вашем примере.

По определению, план выполнения предназначен для одного оператора SQL. Блок PL / SQL не имеет плана выполнения. Если он содержит один или несколько операторов SQL, то у каждого из них будет план выполнения.

Один из вариантов - вручную извлечь операторы SQL из кода PL / SQL и использовать процесс, который вы уже показали.

Другой вариант - активировать трассировку SQL, а затем запустить процедуру. Это создаст файл трассировки на сервере, который содержит планы выполнения для всех операторов, выполненных в сеансе. Трассировка находится в довольно сырой форме, поэтому ее проще всего отформатировать с помощью инструмента Oracle TKPROF; Существуют также различные сторонние инструменты, которые обрабатывают эти файлы трассировки.

1 голос
/ 20 сентября 2016
Hi I have done like below for the stored procedure:
SET AUTOTRACE ON
SET TIMING ON
SET TRIMSPOOL ON
SET LINES 200
SPOOL filename.txt
SET AUTOTRACE TRACEONLY;
@your stored procedure path
SPOOL OFF
SET AUTOTRACE OFF

And got the below statistics: 

   Statistics
-----------------------------------------------------------
               6  CPU used by this session
               8  CPU used when call started
              53  DB time
               6  Requests to/from client
          188416  cell physical IO interconnect bytes
             237  consistent gets
             112  consistent gets - examination
             237  consistent gets from cache
             110  consistent gets from cache (fastpath)
            2043  db block gets
               1  db block gets direct
            2042  db block gets from cache
             567  db block gets from cache (fastpath)
              27  enqueue releases
              27  enqueue requests
               4  messages sent
              31  non-idle wait count
              19  non-idle wait time
              44  opened cursors cumulative
               2  opened cursors current
              22  physical read total IO requests
          180224  physical read total bytes
               1  physical write total IO requests
            8192  physical write total bytes
               1  pinned cursors current
             461  recursive calls
               4  recursive cpu usage
            2280  session logical reads
         1572864  session pga memory
              19  user I/O wait time
               9  user calls
               1  user commits
No Errors.
Autotrace Disabled
...