|
Программирование >> Oracle
Пакет DBMS PROFILER 1707 ное имя, а затем выполняем соответствующий код. Я вызывал каждую из функций вычисления факториала 50 раз, прежде чем завершить сбор статистической информации для прогона. Теперь все готово для анализа результатов. В каталоге [ORACLE HOME]/plsql/demo есть сценарий profsum.sql. Не запускайте его: некоторые запросы этого сценария выполняются очень долго (иногда - несколько часов), и он выдает очень много данных. (Ниже представлен измененный сценарий profsum.sql, который использую я; он выдает почти ту же информацию, но запросы выполняются очень быстро, а многие отчеты с избыточной детализацией просто не создаются.) Кроме того, одни запросы учитывают время выполнения вызова STOP PROFILER, другие - нет. Это затрудняет сравнение результатов запросов. Я изменил все запросы так, чтобы время выполнения вызовов пакета профилировщика нигде не учитывалось. Мой сценарий profsum.sql представлен ниже. Кроме того, он доступен для загрузки на сайте http: www.wrox.com: set echo off set linesize 5000 set trimspool on set serveroutput on set termout off column owner format all column unit name format al4 column text format a21 word wrapped column runid format 9999 column secs format 999.99 column hsecs format 999.99 column grand total format 9999.99 column run comment format all word wrapped column line# format 99999 column pct format 999.9 column unit owner format all spool profsum.out /* Очистка и пересоздание итоговых результатов. */ update plsql profiler units set total time = 0; execute prof report utilities.rollup all runs; prompt = prompt = prompt ======================== prompt Суммарное время select grand total/1000000000 as grand total from plsql profiler grand total; prompt = prompt = prompt===================== prompt Суммарное время каждого прогона select runid, substr(run comment,l, 30) as run comment. 1708 Приложение А run total time/1000000000 as secs from (select a.runid, sum(a.total time) run total time, b.run comment from plsql profiler units a, plsql profiler runs b where a.runid = b.runid group by a.runid, b.run coent) where run total time > 0 order by runid asc; prompt = prompt = prompt================== prompt Процент времени, иходящийся на каждый модуль, отдельно для -> каждого прогона select pl.runid, substr(p2.run coent, 1, 20) as run comment, pl.unit owner, decode(pl.unit name, , <anonymous>, substr(pl.unit name,l, 20)) as unit name, pl.total time/1000000000 as secs, TO CHAR(100*pl.total time/p2.run total time, 999.9) as percentage from plsql profiler units p1, (select a.runid, sum(a.total time) run total time, b.run coent from plsql profiler units a, plsql profiler runs b where a.runid - b.runid group by a.runid, b.run coent) p2 where pl.runid=p2.runid and pl.total time > 0 and p2.run total time > 0 and (pl.total time/p2.run total time) >= .01 order by pl.runid asc, pl.total time desc; column secs form 9.99 prompt = prompt = prompt - prompt Процент времени, иходящийся на каждый модуль, суммарно по всем -> прогонам select pl.unit owner, decode(pl.unit name, , <anonymous>, substr(pl.unit name,l, 25)) as unit name, pl.total time/1000000000 as secs, TO CHAR(100*pl.total time/p2.grand total, 99999.99) as percentage from plsql profiler units cross run p1, plsql profiler grand total p2 order by pl.total time DESC; prompt = prompt = prompt======================== prompt Строки, потребовавшие более 1% суммарного времени, отдельно по -> каждому прогону select pl.runid as runid, pl.total time/10000000 as Hsecs, pl.total time/p4.grand total*100 as pct. Пакет DBMS PROFILER 1709 substr(p2.unit ovmer, 1, 20) as owner, decode(p2.unit nae, , <anonymous> , substr(p2.unit nae,l, as unit name, pl.line#, (select p3.text from all source p3 where p3.owner = p2.unit owner and p3.line = pl.line# and p3.name=p2.unit name and p3.type not in (PACKAGE, TYPE)) text from plsql profiler data p1, plsql profiler units p2 , plsql profiler grand total p4 where (pl.total time >= p4.grand total/100) AND pl.runID = p2.runid and p2.unit number=p1.unit number order by pl.total time desc; prompt = prompt = 20)) prompt select from where order Наиболее полярные строки (более pl.total time/10000000 as hsecs, pl.total time/p4.grand total*100 as pct, substr(pl.unit owner, 1, 20) as unit owner, decode(pl.unit nae, , <anonymous>, substr(pl.unit name,l, 20)) as pl.line#, (select p3.text from all source рЗ where (p3.1ine = p1.line#) and (p3.owner = pl.unit owner) AND (p3.name = pl.unit name) and (p3.type not in (PACKAGE, TYPE))) plsql profiler lines cross run p1, plsql profiler grand total p4 (pl.total time >= p4.grand total/100) by pl.total time desc; 1%), суммарно по всем прогонам unit name. text execute prof report utilities.rollup all runs; prompt = prompt = prompt prompt Количество реально выполненных строк в программных единицах (с -> группировкой по unit name) select pl.unit owner, pl.unit name, count(decode( pl.total occur, 0, null, 0)) as lines executed , count(pl.line#) as lines present, count(decode( pl.total occur, 0, null, 0))/count(pl.line#) *100 as pct from plsql profiler lines cross run p1 where (pl.unit type in (PACKAGE BODY, TYPE BODY,
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |