Sunteți pe pagina 1din 29

CAP.

MONITORIZAREA ŞI
ÎMBUNĂTĂŢIREA
PERFORMANŢELOR UNEI
BAZE DE DATE
AUDIT
• Auditarea frazelor-comenzilor
• Auditarea privilegiilor
• Auditarea obiectelor
• Auditarea accesului la date pe baza
conţinutului (bazat pe valori)
Activarea optiunii de auditare

Parametrul de initializare AUDIT_TRAIL

NONE – valoarea implicită care desemnează faptul că


orice opţiune de auditare este dezactivată;
DB – toate înregistrările de auditare sunt consemnate
în tabela SYS.AUD$ din dicţionarul bazei de date;
OS - dacă sistemul de operare permite, toate
înregistrările de auditare sunt consemnate în fişiere ale OS.
Relocalizarea tabelei de auditare
AUD$
• ALTER TABLE aud$ MOVE
TABLESPACE AUDIT_TAB;

• CREATE INDEX i_aud1 ON aud$


(sessionid, ses$tid) TABLESPACE
AUDIT_IDX;

• AUDIT delete ON sys.aud$ BY ACCESS;


Optiuni de auditare

Auditarea sesiunilor

AUDIT SESSION;

Auditarea operaţiilor în baza de date şi auditarea


obiectelor

AUDIT user;
AUDIT table;
AUDIT selecy any table By student BY ACCESS;
AUDIT LOCK ON student.comenzi BY ACCESS
WHENEVER SUCCESSFUL;
Sintaxa comenzii AUDIT
Auditarea comenzilor SQL sau privilegiilor :

AUDIT {statement | system_priv}


[, {statement | system_priv}]
[BY user [, user] …]
[BY {SESSION | ACCESS}]
[WHENEVER [NOT] SUCCESSFUL]

Auditarea obiectelor

AUDIT statement [, statement] …


ON {[schema.]object | DEFAULT}
[BY {SESSION | ACCESS}]
[WHENEVER [NOT] SUCCESSFUL]
Optiuni de AUDIT
  Tabelă View Secv. Proc.stoc Snapsh.

ALTER X   X   X
AUDIT X X X X X
COMMENT X X     X
DELETE X X     X
EXECUTE       X  
GRANT X X X X X
INDEX X       X
INSERT X X     X
LOCK X X   X
SELECT X X X X X
UPDATE X X     X
Informatii despre optiunile de audit

View din dicţionarul de date Descrire

ALL_DEF_AUDIT_OPTS Toate opţiunile de audit DEFAULT

DBA_STMT_AUDIT_OPTS Opţiunile de audit la nivel de frază


SQL
DBA_PRIV_AUDIT_OPTS Opţiunile de audit la nivel de
privilegii
DBA_OBJ_AUDIT_OPTS Opţiunile de audit la nivelul
obiectelor
Inregistrarile de audit

View din dicţionarul de date Descrire

DBA_AUDIT_TRAIL Toate înregistrările de audit generate

DBA_AUDIT_OBJECT Înregistrările privind obiectele din


schema curentă

DBA_AUDIT_SESSION Toate înregistrările care


consemnează conectări sau
deconectări la serverul Oracle
DBA_ AUDIT_STATEMENT Înregistrări privind comenzile SQL
auditate
Dezactivarea optiunii de audit

NOAUDIT {statement | system_priv}


[, {statement | system_priv}]
[BY user [, user] …]
[WHENEVER [NOT] SUCCESSFUL]

NOAUDIT statement [, statement] …


ON {[schema.]object | DEFAULT}
[WHENEVER [NOT] SUCCESSFUL]
Fine Grained Audit DBMS_FGA
• procedure add_policy(
– object_schema IN VARCHAR2,
– object_name IN VARCHAR2,
– policy_name IN VARCHAR2,
– audit_condition IN VARCHAR2,
– audit_column IN VARCHAR2,
– handler_schema IN VARCHAR2,
– handler_module IN VARCHAR2,
– enable IN BOOLEAN);
• procedure drop_policy(
– object_schema IN VARCHAR2,
– object_name IN VARCHAR2,
– policy_name IN VARCHAR2);
Fine Grained Audit DBMS_FGA
• procedure enable_policy(
– object_schema IN VARCHAR2,
– object_name IN VARCHAR2,
– policy_name IN VARCHAR2,
– enable IN BOOLEAN);
• procedure disable_policy(
– object_schema IN VARCHAR2,
– object_name IN VARCHAR2,
– policy_name IN VARCHAR2);
Optimizorul bazat pe reguli
Rangul Calea de acces la înregistrări

1 Câte o singură înregistrare prin ROWID


2 Câte o singură înregistrare printr-un join cluster
3 Câte o singură înregistrare prin prin cheia unui cluster, cheie care este cheie primară sau
unică
4 Câte o singură înregistrare printr-o cheie primară sau unică
5 Cluster Join
6 Prin cheia cluster-ului hash
7 Prin cheia cluster-ului index
8 Printr-un index compus – conţinând mai multe coloane
9 Printr-un index după o singură coloană
10 Căutări (condiţii filtru) cu legătură între ele după o coloană indexată (de ex. >= AND <=)

11 Căutări (condiţii filtru) fără legătură între ele după coloane indexate
12 Sort-merge join
13 Funcţii MIN sau MAX după o coloană indexată
14 Clauza ORDER BY după o coloană indexată
15 Scanare completă a tabelei
Optimizorul bazat pe cost

ia în considerare statisticile din dicţionarul de date


pentru a determina planul de execuţie cel mai bun ia în
calcul numărul de linii ale tabelelor şi selectivitatea
coloanelor
Informaţiile statistice din dicţionarul bazei de date sunt
adunate prin comenzi ANALYZE :
ANALYZE TABLE table COMPUTE STATISTICS;
ANALYZE TABLE table ESTIMATE STATISTICS;
ANALYZE TABLE table ESTIMATE STATISTICS
SAMPLE 10 PERCENT;
ANALYZE TABLE table ESTIMATE STATISTICS
SAMPLE 1000 ROWS;
Alegerea optimizorului

1.Parametrul de initializare OPTIMIZER_MODE


RULE – ce determină folosirea implicit a optimizorului
bazat pe reguli;
CHOOSE – implicit optimizorul bazat pe cost (informaţii
statistice prezente), altfel optimizorul bazat pe reguli.

2. La nivel de sesiune
ALTER SESSION SET OPTIMIZER_MODE = {CHOOSE | RULE}

3. La nivel de fraza SQL


select /*+RULE*/ codcl, nrcom, data from comenzi
where nrcom = 610
/
Directive la nivelde fraza SQL

Directiva (Hint) Scop

FIRST_ROW Sugerează folosirea optimizorului bazat pe cost pentru a


returna prima linie din setul de înregistrări returnat, în cel
mai scurt timp posibil
ALL_ROWS Sugerează folosirea optimizorului bazat pe cost pentru a
returna toate înregistrările în timpul cel mai scurt
CHOOSE Sugerează folosirea optimizorului bazat pe cost dacă
există informaţii statistice
RULE Sugerează folosirea optimizorului bazat pe reguli

ORDERED Sugerează join-ul tabelelor în ordinea în care apar în


clauza FROM folosind optimizorul bazat pe cost
INDEX(tablena Sugerează optimizorului bazat pe cost să execute o
me, indexname) scanare a unui indexului specificat. Respectivul index va
fi precizat inclusiv cu numele tabelei pe care a fost definit
Planul de executie

SQL> select codcl, nrcom, data from comenzi


2 where nrcom = 610
3 /
 
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=16)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'COMENZI' (Cost=1 Card=1 Bytes=16)
2 1 INDEX (UNIQUE SCAN) OF 'COM_ IDX' (NON-UNIQUE)
Obtinerea planului de executie (1)
Rularea intr-o sesiune deschisa ca user SYS a
scriptului @%ORACLE_HOME
%\sqlplus\admin\plustrce.sql.
utilizatorii care au primit rolul PLUSTRACE tb. sa
ruleze scriptul
@%ORACLE_HOME%\rdbms\admin\utlxplan.sql
Se execută
explain plan
set Statement_ID = 'TEST'
for fraza SQL
Se interoghează PLAN_TABLE
select LPAD(' ', 2*Level)||Operation||' '||Options||' '||
Object_name Q_Plan, position
from PLAN_TABLE
where Statement_ID = 'TEST'
connect by prior ID = Parent_ID and Statement_ID = 'TEST'
start with ID= 0;
Obtinerea planului de executie (2)

Rularea intr-o sesiune deschisa ca user SYS a


scriptului @%ORACLE_HOME
%\sqlplus\admin\plustrce.sql.
utilizatorii care au primit rolul PLUSTRACE tb. sa
ruleze scriptul
@%ORACLE_HOME%\rdbms\admin\utlxplan.sql
Se execută comanda SET AUTOTRACE
Se executa fraza SQL

Sintaxa comenzii SET AUTOTRACE


SET AUTOT[RACE] OFF | ON | TRACE[ONLY]
[EXP[PLAIN]] [STAT[ISTICS]]
Obtinerea planului de executie (3) cu utilitarul TKPROF

Se verifica parametrii de initializare:


TIMED_STATISTICS - tb. sa aiba valoare TRUE
USER_DUMP_DEST
MAX_DUMP_FILE_SIZE
Se deschide sesiune SQL*PLUS şi se execută
comanda
ALTER SESSION SET SQL_TRACE = TRUE;
Se executa frazele SQL si, in final comanda:
ALTER SESSION SET SQL_TRACE = FALSE;
Se invoca de la promptul S.O. utilitarul TKPROF
C:>tkprof <trace_file> <formatted_output_file> explain =
schema/password sys = no
Se citeste si interpreteaza fisierul formatat
Tipuri de join efectuate

Nested loop join


Sort merge join
Hash join
Cluster join
Nested join

SQL> select /*+RULE*/ *


2 from comenzi c, clienti cl
3 where c.codcl = cl.codcl;
 
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 NESTED LOOPS
2 1 TABLE ACCESS (FULL) OF 'CLIENTI'
3 1 TABLE ACCESS (BY INDEX ROWID) OF 'COMENZI'
4 3 INDEX (RANGE SCAN) OF 'COMENZI_PK' (UNIQUE)
Sort-merge join

SQL> select /*+USE_MERGE(c, cl)*/ *


2 from comenzi1 c, clienti cl
3 where c.codcl = cl.codcl
SQL> /
 
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=7 Card=2
Bytes=112)
1 0 MERGE JOIN (Cost=7 Card=2 Bytes=112)
2 1 SORT (JOIN) (Cost=4 Card=8 Bytes=176)
3 2 TABLE ACCESS (FULL) OF 'CLIENTI' (Cost=2 Card=8 Bytes=
176)
 
4 1 SORT (JOIN) (Cost=3 Card=21 Bytes=714)
5 4 TABLE ACCESS (FULL) OF 'COMENZI1' (Cost=1 Card=21
Bytes=714)
Hash join

SQL> select /*+USE_HASH(c, p)*/ *


2 from comenzi1 c, prodcom1 p
3 where c.nrcom = p.nrcom
SQL> /
 
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=13
Bytes=949)
1 0 HASH JOIN (Cost=3 Card=13 Bytes=949)
2 1 TABLE ACCESS (FULL) OF 'COMENZI1' (Cost=1 Card=21
Bytes=714)
 
3 1 TABLE ACCESS (FULL) OF 'PRODCOM1' (Cost=1 Card=61
Bytes=2379)
Dimensiunea SGA
SGA =
(DB_BLOCK_SIZE*DB_BLOCK_BUFFERS) +
LOG_BUFFER +
SHARED_POOL_SIZE +
JAVA_POOL_SIZE

Rata CACHE HIT


Cache desemnează un tip particular de buffer, buffer-ul reprezentând o
zonă de memorie internă pentru stocarea temporară a datelor.
Cache hits - un utilizator cere informaţii ce se găsesc deja în cache.
Cache misses - cererea unui utilizator nu poate fi rezolvată doar cu
informaţiile existente deja în cache, restul informatiilor fiind citite informaţii
de pe disc.
Rata cache hit = ( 1 – (citirile fizice/citirile logice)) * 100
Obtinerea inf. statistice
View-uri statistice: V$SYSSTAT, V$LATCH, V$ROLLSTAT,
V$LIBRARYCACHE, V$ROWCACHE etc

Scripturi administrative: UTLBSTAT.SQL si UTLESTAT.SQL


Report.txt:
Statistic Total Per Transact Per Logon Per Second
--------------------------- ------------ ------------ ------------ ------------
CPU used by this session 529 529 40.69 9.12
CPU used when call started 19 19 1.46 .33
CR blocks created 39 39 3 .67
DBWR checkpoint buffers wri 32 32 2.46 .55
DBWR undo block writes 10 10 .77 .17
SQL*Net roundtrips to/from 27 27 2.08 .47
background timeouts 77 77 5.92 1.33
-------------------------
TABLE_SPACE READS BLKS_READ READ_TIME WRITES BLKS_WRT
WRITE_TIME MEGABYTES
----------- ---------- ---------- ---------- ---------- ---------- ----------
----------
DATA01 0 0 0 0 0 0
2
DATA02 0 0 0 0 0 0
1
INDX01 0 0 0 0 0 0
1
RBS 0 0 0 10 10 0
3
SYSTEM 14 76 0 98 98 0
Monitorizarea SHARED POOL

Pentru library cache


SELECT SUM(pins) "Pins",
SUM(reloads) "Relaods",
SUM(pins)/(SUM(pins)+SUM(reloads)) * 100 "Cache hit ratio"
FROM v$librarycache;

Pentru data dictionary cache


SELECT SUM(gets) "Gets",
SUM(getmisses) "Misses",
1-(SUM(getmisses)/SUM(gets)) "Cache hit ratio"
FROM v$rowcache;
Monitorizarea DATABASE BUFFER CACHE

SELECT (1 - (a.value / (b.value + c.value))) * 100


"Cache Hit Ratio"
FROM v$sysstat a, v$sysstat b, v$sysstat c
WHERE a.name = 'physical reads'
AND b.name = 'db block gets'
AND c.name = 'consistent gets'

Monitorizarea operatiilor de sortare

SELECT name, value


FROM v$sysstat
WHERE name = 'sorts (memory)'
OR name = 'sorts (disk)' ;
Monitorizarea operatiilor I/E pe disc in fisierele de date
SQL> SELECT name "Name", phyrds "Phys. Reads",
2 phywrts "Phys. Writes",
3 phyrds+phywrts "Sum"
4 FROM v$datafile df, v$filestat fs
5 where df.file# = fs.file#
6 order by name;

Monitorizarea operatiilor I/E pe disc in segmentele rollback


SQL> SELECT a.class "Clasa", a.count "Count",
2 SUM(b.value) "Total cereri",
3 ROUND(((a.count/SUM(b.value))*100), 3) "Procentaj intirzieri"
4 FROM v$waitstat a, v$sysstat b
5 WHERE a.class IN ('system undo header', 'system undo block',
'undo header', 'undo block')
6 and b.name IN ('db block gets', 'consistent gets')
7* GROUP BY a.class, a.count

S-ar putea să vă placă și