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 cerute sau dă clic pe un icon pentru a te autentifica:

Logo WordPress.com

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

Fotografie Facebook

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

Conectare la %s

Mathijs Bruggink

Tips Tricks and Blogs on Oracle

Oracle Romania

Simplify IT

Programat in Romania

Blogul industriei de software din Romania. Comunitate dezvoltatori

Dan Bârsan

The miracle is not that we do this work, but that we are happy to do it. I'm writing in Romanian and English

Romanian Oracle User Group

Focusing On Oracle Database Administration

Big Lazy SysAdmin

Adapt. Enjoy. Survive.

Talip Hakan Ozturk's ORACLE BLOG

The secret of success is at your fingertips!...

Pickleball spielen

002 - License to dink

Mathijs Bruggink

Tips Tricks and Blogs on Oracle

Oracle Romania

Simplify IT

Programat in Romania

Blogul industriei de software din Romania. Comunitate dezvoltatori

Dan Bârsan

The miracle is not that we do this work, but that we are happy to do it. I'm writing in Romanian and English

Romanian Oracle User Group

Focusing On Oracle Database Administration

Big Lazy SysAdmin

Adapt. Enjoy. Survive.

Talip Hakan Ozturk's ORACLE BLOG

The secret of success is at your fingertips!...

Pickleball spielen

002 - License to dink

%d blogeri au apreciat: