Pachetul DBMS_PROFILER oferă dezvoltatorilor o modalitate pentru a determina blocaje de performanță ale aplicațiilor PL/SQL. DBMS_PROFILER permite dezvoltatorilor analiza comportamentului și timpului de funcționare a codului PL/SQL și ajută la identificarea problemelor de performanță oferind „numărul de execuții” și „timpul necesar” pentru fiecare linie din blocul PL/SQL.

DBMS_PROFILER generează următoarele statistici:
– Timpul total scurs de la executarea întregului cod.
– Numărul total al execuțiilor pentru fiecare linie de cod.
– Timpul total petrecut în executarea fiecărei linii de cod.
– Timpul minim/maxim petrecut pentru fiecare linie de cod în execuție.
– Codul executat pentru un anumit scenariu și condiții.

Pachetul DBMS_PROFILER oferă trei proceduri:
– DBMS_PROFILER.START_PROFILER: începe procesul de monitorizare
– DBMS_PROFILER.STOP_PROFILER: oprește procesul de monitorizare
– DBMS_PROFILER.FLUSH_DATA: salvarea statisticilor în tabele și curățarea memoriei.

Dacă utilizați DBMS_PROFILER pentru prima dată, poate fi necesar să-l instalați. Script-urile de instalare se află în „$ORACLE_HOME/RDBMS/admin”.

Cum se instalează pachetul de DBMS_PROFILER:
Instalarea pachetului DBMS_PROFILER este un proces din doi pași.
1. se executa „@$ORACLE_HOME/RDBMS/admin/profload.sql”, cu utilizatorul sys.
2. se executa „@$ORACLE_HOME/RDBMS/admin/proftab.sql” de utilizator pe care doriți să utilizați DBMS_PROFILER.

SQL> conn / as sysdba
Connected.
SQL> @?/rdbms/admin/profload.sql

Package created.

Grant succeeded.

Synonym created.

Library created.

Package body created.

Testing for correct installation
SYS.DBMS_PROFILER successfully loaded.

PL/SQL procedure successfully completed.

Pasul 2 va crea următoarele tabele în care vor fi stocate datele de profil, din care putem extrage informațiile pentru a determina blocajele de performanță.
– PLSQL_PROFILER_RUNS
– PLSQL_PROFILER_UNITS
– PLSQL_PROFILER_DATA

SQL> conn scott/tiger
Connected.
SQL> @?/rdbms/admin/proftab.sql
drop table plsql_profiler_data cascade constraints
           *
ERROR at line 1:
ORA-00942: table or view does not exist

drop table plsql_profiler_units cascade constraints
           *
ERROR at line 1:
ORA-00942: table or view does not exist

drop table plsql_profiler_runs cascade constraints
           *
ERROR at line 1:
ORA-00942: table or view does not exist

drop sequence plsql_profiler_runnumber
              *
ERROR at line 1:
ORA-02289: sequence does not exist

Table created.

Comment created.

Table created.

Comment created.

Table created.

Comment created.

Sequence created.

Pentru a analiza codul PL/SQL și identificarea problemelor de performanță folosind DBMS_PROFILER trebuie să începem mai întâi să pornim profiler-ul folosind DBMS_PROFILER.START_PROFILER, atunci putem executa procedura PL/SQL care va fi monitorizata, iar în cele din urma pentru a opri profiler-ul trebuie sa apelam DBMS_PROFILER.STOP_PROFILER. Nu avem nevoie de a apela DBMS_PROFILER.FLUSH_DATA în mod explicit deoarece DBMS_PROFILER.STOP_PROFILE va apela flush profiler data automat.

Pasul 1: Colectarea datelor

SQL> conn scott/tiger
Connected.
SQL> exec dbms_profiler.start_profiler('Test profiler');

PL/SQL procedure successfully completed.
SQL> declare
   counter number := 1;
  3     executions number;
  4     buffer_gets NUMBER;
  5     cpu_time  number;
  6     elapsed_time number;
  7
  8  error_code number;
  9
 10  BEGIN
 11  for i in 1..10000 loop
 12  select count('test_profiler') into counter from dual;
 13  end loop;
 14
 15  select executions,buffer_gets,cpu_time,elapsed_time into executions,buffer_gets,cpu_time,elapsed_time
 16  from sys.v_$sqlstats where sql_text like '%test_profiler%FROM DUAL';
 17
 18  dbms_output.put_line('exectutions:                          ' || to_char(executions,'999,999,999'));
 19  dbms_output.put_line('buffer gets:                          ' || to_char(buffer_gets,'999,999,999'));
 20  dbms_output.put_line('cpu time:                             ' || to_char(cpu_time,'999,999,999'));
 21  dbms_output.put_line('elapsed time:                         ' || to_char(elapsed_time,'999,999,999'));
 22  dbms_output.put_line('elapsed time per execution(ms)   :      ' ||to_char( elapsed_time/executions/1000,'999,999.9'));
 23  dbms_output.put_line('buffer_gets/second:                   ' ||to_char( buffer_gets/(elapsed_time/1000000),'999,999,999'));
 24
 25  END;
 26  /

PL/SQL procedure successfully completed.

SQL> exec dbms_profiler.stop_profiler;

PL/SQL procedure successfully completed.

Pasul 2. Identificarea RUNID folosind PLSQL_PROFILER_RUNS

SQL> select runid, run_owner, run_date, run_total_time  
2 from plsql_profiler_runs where run_comment='Test profiler';

     RUNID RUN_OWNER                        RUN_DATE  RUN_TOTAL_TIME
---------- -------------------------------- --------- --------------
         1 SCOTT                            23-OCT-13     3.7790E+10

Pasul 3. Identificarea liniilor problematice PL/SQL cu ajutorul datelor din PLSQL_PROFILER_DATA

SQL> select unit_number,line#, total_occur, total_time, min_time, max_time 
2 from plsql_profiler_data order by total_time desc,unit_number;

UNIT_NUMBER      LINE# TOTAL_OCCUR TOTAL_TIME   MIN_TIME   MAX_TIME
----------- ---------- ----------- ---------- ---------- ----------
          2         12       10000  390506914      34994     768885
          2         15           1   50254524   50254524   50254524
          2         11       10001    2809582          0      77988
          2         18           1     225966        999     224966
          3          1           2      93986       1999      89986
          2         22           1       6998       6998       6998
          2         19           1       6998       6998       6998
          2          1           0       4999       4999       4999
          2         21           1       1999       1999       1999
          2          2           1       1999       1999       1999
          2         20           1       1999       1999       1999
          2         23           1       1999       1999       1999
          2         25           1       1999       1999       1999

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s