Oracle DBMS_PROFILER показывает только Anonymous в таблицах результатов - PullRequest
5 голосов
/ 27 мая 2010

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

RUNID RUN_COMMENT UNIT_OWNER  UNIT_NAME         SECS PERCEN
----- ----------- ----------- -------------- ------- ------
5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler

5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler

5     Test        <anonymous> <anonymous>        .00    2.1
      Profiler

Я только что встроил вызовы в dbms_profiler.start_profiler, flush_data и stop_profiler, как и во всех примерах. Основное отличие состоит в том, что мой код находится в пакете и вызывает другой пакет. Нужно ли профилировать каждую хранимую процедуру в стеке вызовов? Если так, то это делает этот инструмент немного бесполезным!

Я проверил http://www.dba -oracle.com / t_plsql_dbms_profiler.htm на наличие подсказок среди других похожих сайтов.

1 Ответ

4 голосов
/ 28 мая 2010

Вы уверены, что это не проблема с вашим запросом для получения данных из plsql_profiler_units?


Я пробовал это:

Create Procedure sub_procedure As
Begin
  dbms_output.put_line('test');
End;

Create Package test_package As
  Procedure test;
End;

Create Package Body test_package As
  Procedure test As Begin
    For i In 1 .. 10 Loop
      If(i<=5) Then
        sub_procedure;
      End If;
    End Loop;
  End;
End;

Begin
  DBMS_PROFILER.start_profiler(SYSDATE);
  test_package.test;
  DBMS_PROFILER.stop_profiler;
End;

и этот простой запрос

Select uni.unit_name, dat.line#, dat.total_occur
  From plsql_profiler_data dat
  Join plsql_profiler_units uni On (     uni.runid = dat.runid
                                     And uni.unit_number = dat.unit_number )

дает мне ожидаемый результат, показывая также пакеты и процедуры:

<anonymous>    1  0
<anonymous>    2  0
<anonymous>    3  2
<anonymous>    4  1
<anonymous>    5  0
TEST_PACKAGE   2  0
TEST_PACKAGE   3 11
TEST_PACKAGE   4  5
TEST_PACKAGE   5  6
TEST_PACKAGE   8  1
SUB_PROCEDURE  1  0
SUB_PROCEDURE  3  5
SUB_PROCEDURE  4  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...