oracle display для каждой хранимой процедуры время выполнения - PullRequest
0 голосов
/ 30 апреля 2010

Я работаю над хранимой процедурой. Внутри этого есть много обращений к другим хранимым процедурам. Их много.

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

Идея состоит в том, что мне нужно оптимизировать его, и я должен касаться каждой части, и, поскольку я не уверен, где самое длительное время выполнения, это немного сложно. И после модификации я хотел бы увидеть процесс дырки, если он короче или нет. Если я вызываю процедуру из Unix, используя sql plus, у меня нет журнала. Если я позвоню из TOAD, он будет заблокирован до конца.

Есть идеи?

Я не dba, поэтому у меня мало прав на базу данных, я просто обычный пользователь.

Ответы [ 2 ]

3 голосов
/ 30 апреля 2010

Если вы используете Oracle 11g, вы должны проверить встроенный иерархический профилировщик . Это в значительной степени именно то, что вы предлагаете сделать. К сожалению, права на DBMS_HPROF не предоставляются PUBLIC по умолчанию, поэтому вам нужно попросить своего администратора баз данных предоставить вам привилегию EXECUTE. Поскольку это поможет вам с настройкой, я уверен, что они будут только рады подчиниться.

0 голосов
/ 30 апреля 2010

Я видел процедуру ведения журнала, которая не зависела от транзакции (PRAGMA AUTONOMOUS_TRANSACTION;) и была вызвана из основной процедуры. Сохранено в таблице funtime_log:

  • текущее время (настенные часы),
  • порядковый номер,
  • идентификатор потока (сеанса),
  • и текст (например, название процедуры)

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

...