Vous êtes sur la page 1sur 34

Base de Donnes avances

Fonctionnement et Tuning de la SGA sous Oracle

TOUAMI Khaled

Base de Donnes avances

Plan
Structure d une base de donnes Oracle
Architecture technique dune base Oracle
System Global Area (SGA)
Fonctionnement
Optimisation

Statpack
TOAD

Base de Donnes avances

Structure dune base Oracle


Instance Oracle

SGA

Processes

Base de donnes
Oracle

Base de Donnes avances

Dfinitions

Base de Donnes(database)
Ensemble de fichiers de donnes (data files), des fichiers de contrle(control files) et des fichiers
journaux de transactions (redo logs), formant la structure permanente d un serveur oracle.

Instance
Elle comprend la System Global Area (SGA), les processus d arrire-plan associs et les structures
correspondantes de mmoire partage. Elle est transitoire est cre chaque dmarrage d instance.

Base de Donnes avances


Processus
DBWR( Database Writer)
Transfert les blocs de donnes modifies du data buffer dans les fichiers disque de la base de donnes.
Le paramtre d initialisation DB_WRITERS_PROCESSES permet de dmarrer plusieurs processus
DBWR, afin d augmenter le taux d criture sur disque.
LGWR(Log Writer)
crit les donnes modifies depuis la zone mmoire redo-log buffer dans les fichiers redo-log.
CKPT(Checkpoint)
Signe des intervalles rguliers, le moment d criture des donnes modifies dans la SGA dans les
fichiers de la base de donnes.
Il modifi lensemble des fichiers qui composent la base de donnes, pour que le numro d ordre du plus
rcent checkpoint soit inscrit en en-tte de fichier.
SMON(System Monitor)
Surveille la base de donnes lors de son dmarrage, puis au cours de son fonctionnement.
PMON(Processus Monitor)
Nettoie les transactions dfaillantes, comme celle d un poste client arrter brutalement durant une
transaction (zonez alloues libres, les verrous poss sont supprims, les ressources affectes sont
annules).
Vues : V$bgprocess

Base de Donnes avances


SGA
Shared Pool

Processus SNPnnn

Processus Pnnn

Data Dictionnary Cache


Data Buffer Cache

Processus LCKnn

Library Cache

Redo-Log Buffer

DBWR

LGWR

SMON

PMON

CKPT
Processus ddi un
utilisteur

Processus ddi un
utilisateur
Dmarrage/arrt de linstance

Listener
Oracle Net
Fichiers de
donnes

Fichiers RedoLog

Fichiers de
contrle

Fichier Init.ora

Fichiers
Listener.ora

Rseau

ARCH

Programme
utilisateur

Programme
utilisateur

Archivage des
fichiers Redo-Log
Fichiers
TNSNAMES.
ORA

Architecture Technique

Base de Donnes avances

System Global Area (SGA)


Dfinition : C est une zone mmoire qui regroupe un ensemble de structures de mmoire partages qui
contiennent les donnes, et les informations de contrle le plus souvent utilises d une instance oracle.
Elle comprend :
Shared Pool Area
Data buffer Cache
Redo-log Buffer
Volume initial de la SGA : La SGA doit reprsenter au moins 2% de la taille totale de la base de donnes
(physique).
Elle est repartie comme suit :
50% Cache de donnes (database buffer cache)
40% Shared Pool
10% Redo Log Buffers
Espace libre dans la SGA : Pour connatre l espace libre dans la SGA, on interroge la vue V$SGASTAT
select * from v$sgastat where name = 'free memory'

Mesure de performance : la mesure de la performance revient calculer les diffrents indicateurs ratios
d analyse correspondants aux diffrentes partis de la SGA.
7

Base de Donnes avances

Shared Pool Area


Dfinition : C est une partie de la SGA dans laquelle les instructions SQL, les procdures stockes et les
informations spcifiques du dictionnaire sont enregistres en mmoire.
Elle est gre au moyen d un algorithme LRU (Least Recently Used).

Elle comprend :
Library cache : il contient le code SQL des instructions et les plans d excutions associs , les blocs
PL/SQL et des classes Java.
Dictionary cache : contient des mta donnes issues du dictionnaire de donnes dcrivant la structure
et la scurit de tous les objets inclus dans les instructions SQL rcemment utilises.

Paramtres :
SHARED_POOL_SIZE : Dfinit la taille du pool partag, en octets.
SHARED_POOL_RESERVED_SIZE : Rserve une part du pool partag pour des objets de grande
taille ( package, procdure, fonction).

Vues de performance dynamique : V$Rowcache, V$LibrabyCache, V$SqlArea

Base de Donnes avances

Analyse du code SQL

Parse
1

User Process

2
3

Execute
Fetch (Select)

Server Process

Requte
utilisateur

SGA

Base de Donnes avances

PARSE :
Vrification de la syntaxe de l instruction SQL.
Ralisation de la rsolution d objets et les contrles de scurit pour l excution du code.
Construction de larbre danalyse
Dveloppement du plan d excution pour linstruction SQL.

EXECUTE :
Application du plan d excution.
Lecture des blocs de donnes du fichier en mmoire.
Manipulation des donnes en mmoire (Insert, Update, Delete).

FETCH : (select)
Renvoie des lignes au processus utilisateur.

10

Base de Donnes avances

Qu est ce qui l optimisation


C est un ensemble d actions de modifications cibls au niveau des composants de la base de donnes pour
atteindre des objectifs de performance, c est dire augmenter le dbit et rduire les temps de rponse.
Finalit : Satisfaction des utilisateurs.
Mthodologie d optimisation
1. Dfinition des objectifs d optimisation raisonnable.

2. Mesurez et documentez les performances actuelles.


3. Identifier les goulets d tranglement actuels sur Oracle
4. Identifier les goulets d tranglement actuels du systme d exploitation.
5. Optimiser les composants concerns (Application, Instance , Base de donnes, E/S, OS).
6. Application des procdures de contrle des changements,
7. Mesurez et documenter les performances actuelles,
8. Rptez les tapes 3 7 jusqu ce que les objectifs soient atteintes.

11

Base de Donnes avances

Optimisation de la Shared Pool Area

Les principaux problmes lis aux performances du pool partag:

Utilisation intense des ressources CPU, caus par des analyses excessives.
Erreur ORA-4031 : manque de place mmoire.

Mesures de performance
a)- library cache
La vue V$LIBRARYCACHE contient lensemble des informations relatives aux activits de la library cache
depuis le dernier dmarrage de l instance.

12

Base de Donnes avances

DESC V$LIBRARYCACHE

Nom de la colonne
Null?
------------------------------ -------NAMESPACE
GETS
GETHITS
GETHITRATIO
PINS
PINHITS
PINHITRATIO
RELOADS
INVALIDATIONS
DLM_LOCK_REQUESTS
DLM_PIN_REQUESTS
DLM_PIN_RELEASES
DLM_INVALIDATION_REQUESTS
DLM_INVALIDATIONS

Type
---VARCHAR2(15)
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER

13

Base de Donnes avances

Get : Dsigne le nombre de requtes pour un ou plusieurs lments du cache de bibliothque.

Gethit : Le nombre de fois qu un objet t trouv en mmoire.


Gethitratio : C est le rapport entre le Gethits et le Gets.
Pins : le nombre d excutions d un lment donn.
Pinhits : le nombre de fois qu un lment a t excut en mmoire.
Pinhitratio : C est le rapport entre le Pinhits et le Pins.
Reloads : le nombre de manqus ( nombre de demandes infructueuses ayant ncessit un rechargement en
cache.

14

Base de Donnes avances

select NAMESPACE , gets, gethits, gethitratio, pins, pinhits, pinhitratio,


reloads from v$librarycache
order by 1

NAMESPACE

GETS

GETHITS

GETHITRATI

PINS

PINHITS

PINHITRATI

RELOADS

--------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------BODY


94
86 ,914893617
97
83 ,855670103
4
CLUSTER
3648
3639 ,997532895
4861
4847 ,997119934
1
INDEX
180116
120054 ,666537121
180115
120054 ,666540821
0
OBJECT
0
0
1
0
0
1
0
PIPE
0
0
1
0
0
1
0
SQL AREA
951964
870446 ,914368611
13407693
13226440 ,986481418
15085
TABLE/PROCEDURE
207217
138097 ,666436634
410495
285940 ,696573649
22616
TRIGGER
143
138 ,965034965
206
120 ,582524272
63

15

Base de Donnes avances

Library Cache hit-ratio


Select SUM (pins-reloads)/ SUM (pins) "Library cache hit ratio"
FROM V$LIBRARYCACHE
Library cache hit ratio
---------------------------,997253872

( > au seuil de 85%)

Recommandation : Si le library cache hit ratio < 85%, augmentez la valeur du paramtre SHARED_POOL_SIZE

Nombre d analyse ralises


Select STATISTIC#, NAME , VALUE from v$sysstat
where name like 'parse count%'
STATISTIC# NAME
VALUE
---------- ---------------------------------- ---------------152
parse count (total)
960796
153
parse count (hard)
98815

16

Base de Donnes avances

Reload ratio : C est le pourcentage d excutions qui ont ncessit une nouvelle analyse.
Select sum(pins) "EXECUTIONS" , sum(RELOADS) "MISSES",
sum(RELOADS)/sum(pins) "RELOAD RATIO"
from v$librarycache
EXECUTIONS
MISSES
RELOAD RATIO
------------------ ---------------- ----------------------14069958
38637
,274606363

Select sum(pins) "EXECUTIONS" , sum(RELOADS) "MISSES",


sum(RELOADS)/sum(pins) "RELOAD RATIO"
from v$librarycache
where namespace = 'TRIGGER'
EXECUTIONS
MISSES
RELOAD RATIO
--------------------------------------------------------337
87
,258160237
Si la valeur du reload-ratio > 1, On augmente la valeur du paramtre SHARED_POOL_SIZE.

17

Base de Donnes avances

Identification des objets de grande taille

Select name, type, loads, executions from v$db_object_cache


where type in ('PACKAGE', 'PACKAGE BODY','FUNCTION','PROCEDURE')
and owner like 'AGNES

NAME
TYPE
LOADS
EXECUTIONS
SHARABLE_M
-------------------------------------------------------------------------------------------------------------------------------------NOMBRECLIENT
PROCEDURE
3
9
8070
COMMANDE_EXISTE
FUNCTION
2
17
13333
AFFICHER
PROCEDURE
3
61
9218
MAJOR
PROCEDURE
6
7
8335

Remarque : Lorsqu une procdure incluse dans un package est appele, c est l ensemble du package qui
charg en mmoire et analys.

18

Base de Donnes avances


B)- Dictionary Cache
desc v$rowcache
Nom de la colonne
Null?
------------------------------ -------CACHE#
TYPE
SUBORDINATE#
PARAMETER
COUNT
USAGE
FIXED
GETS
GETMISSES
SCANS
SCANMISSES
SCANCOMPLETES
MODIFICATIONS
FLUSHES
DLM_REQUESTS
DLM_CONFLICTS
DLM_RELEASES

Type
---NUMBER
VARCHAR2(11)
NUMBER
VARCHAR2(32)
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER
NUMBER

PARAMETER: Nom de de l lment de dictionnaire de donnes.


GETS : Cumul des demandes dinformations sur llment.
GETMISSES : Cumul des demandes manqus sur l lment

19

Base de Donnes avances

Dictionary cache hits-ratios

SQLWKS> select parameter, gets, getmisses, (gets-getmisses)/(gets) "HIT RATIO" ,


modifications from v$rowcache
where gets != 0
PARAMETER
GETS
GETMISSES
-------------------------------- ---------- ---------dc_free_extents
90595
952
dc_used_extents
2609
825
dc_segments
160997
78607
dc_tablespaces
12486
56
dc_tablespace_quotas
78
15
dc_users
157370
43
dc_rollback_segments
3091309
52
dc_objects
182943
128284
dc_constraints
26
15
dc_object_ids
115365
13330
dc_synonyms
670
120
dc_sequences
35
3
dc_usernames
142586
26
dc_database_links
2
2
dc_histogram_defs
76787
30591
dc_profiles
123
1
dc_user_grants
136588
42

HIT RATIO MODIFICATI


---------- ---------,989491694
1585
,683786892
1691
,511748666
1254
,995514977
0
,807692308
50
,999726759
2
,999983179
41
,298776122
377
,423076923
26
,88445369
108
,820895522
0
,914285714
17
,999817654
2
0
0
,601612252
9856
,991869919
0
,999692506
0

20

Base de Donnes avances

Calcul du dictionary cache hit-ratio


Select (sum(gets-getmisses))/sum(gets)*100 "Dictionary Cache Hit ratio"
from V$Rowcache
Dictionary
---------94,0434197
Une valeur du dictionary cache hit-ratio > 85% est satisfaisante.
Le Keeping
Pour amliorer les performance on fixe des objets de grande taille dans la SPA.
SQL> exec dbms_shared_pool.keep(nom de l objet fixer )
Quels sont les objets fixs

Select Owner, Name, Type, Sharable_mem, Kept from V$DB_OBJECT_CACHE


where Type in (FUNCTION ,PACKAGE,PACKAGE BODY , PROCEDURE)
Order by Owner, Name

21

Base de Donnes avances

DATABASE BUFFER CACHE

1)-Fonctionnement
Les donnes sont crites en mmoire par blocs (si elles ne s y trouvent pas dj) avant de pouvoir tre
manipules en lecture ou en criture.

La quantit de mmoire disponible pour enregistrer ces blocs est limite, de telle sorte que des blocs
doivent tre remplacs par des blocs plus rcents en suivant un mcanisme de gestion appele algorithme
LRU.
Un bloc est dit dirty si son contenu a chang. Oracle n autorise pas de nouvelle donnes prendre
cette place, tant que ce contenu na pas t crit sur disque.
Une fois le bloc crit sur le disque, il devient disponible pour tre rutilis, il est dit free .

Exemple :

2)-Paramtres de configuration

DB_BLOCK_SIZE

(Taille d un bloc en octets)

DB_BLOCK_BUFFER

(Nombre de blocs qui peuvent tre enregistrs)

- La taille d un bloc dtermine la taille de chacun des buffers.


- La taille totale du cache de donnes = DB_BLOCK_BUFFER * DB_BLOCK_SIZ .

22

Base de Donnes avances

ANALYSE DE DATABASE BUFFER CACHE


a)-Le cache hit-ratio : C est le rapport entre le nombre de fois o un bloc est demand et le nombre de fois
o le cache de donnes d oracle a t capable de renvoyer la valeur par une lecture logique plutt que par
une lecture physique.

CHR=100*(1-(physical reads / (consistent gets + db block gets - physical reads)))


Select 1- (phy.value / ( cons.value + db.value - phy.value))
from v$sysstat phy, v$sysstat cons, v$sysstat db
where phy.name ='physical reads'
and cons.name ='consistent gets'
and db.name ='db block gets

b)-Quels objets utilisent la plus grande part du cache de donnes

Select o.owner, o.object_type, o.object_name, count(b.objd) from v$bh, dba_objects o


where b.objd=o.objects_id
group by o.owner, o.object_type, o.object_name
having count(b.objd) > (select to_number(value*0.5) from v$parameter
where name=db_block_buffers)

23

Base de Donnes avances

c)-Les vnements dattente


Pour dterminer les vnements d attentes qui affectent le cache de donnes, on interroge la vue
V$SESSION_WAIT.

Select SW.Sid, S.Username, Substr(SW.Event,1,35), SW.Wait_Time


from V$SESSION S, V$SESSION_WAIT SW
where SW.Event not like 'SQl*Net%'
and SW.Sid=S.Sid
Order by SW.Wait_Time, SW.Event
Les vnements d attente courants relatifs au cache de donnes
Buffer busy waits
: Indique une attente d un buffer dans le cache de la base de donnes.
Free buffer waits
: Manque de buffers libres dans le cache de donnes
Db file sequential read : Signale des attentes associes une lecture excessif d index.
Db file scattered read
: Signale des attentes associes un balayage complet d une table.
Sources dinformations
V$WAITSTAT, V$SYSTEM_EVENT, V$SESSION_WAIT, STATPACK REPORT

24

Base de Donnes avances

Redo Log Buffer


1)-Fonctionnement
Un processus utilisateur lance une instruction DML.
Oracle affecte un identificateur de transaction cette opration.
Le processus serveur associ au processus utilisateur transfre en mmoire les donnes ncessaires,
puis verrouille les lignes concernes qui doivent subir des manipulations.
Le processus serveur crit dans le redo log buffer l image des lignes avant les modifications (before
image).
Le processus serveur mis jour les lignes de donnes.
Le processus serveur crit dans le redo log buffer l image qui suit la transaction (after image).
Les donnes de redo log buffer sont transcrit sur disque lorsque survient l un des vnements suivants:
Chaque fois qu une priode de trois secondes s est coule.
Lors d un commit.
Lorsque l expression MIN(1MB, LOG_BUFFER/3) est vrifie.

Au moment des Checkpoints,


Lorsqu il est dclench par le processus DBWR

25

Base de Donnes avances

B)-Paramtres de configuration
LOG_BUFFER

(Dfinit la taille en octets)

C)- Les vnements d attentes lis au redo log buffer


Log buffer space : Indique un problme potentiel du LGWR.
Log file parallel write : Signale une attente lie l criture de journaux sur le disque.
Log file sync : Signale des attentes lies un vidage du journal lors de la validation (commit) par un
utilisateur.

26

Base de Donnes avances

ANALYSE DE REDO LOG BUFFER


a)-Redo log hit-ratio
Select name, value from V$SYSSTAT
where name in ('redo buffer allocation retries','redo entries')
NAME
VALUE
-------------------------------------------- ---------------redo entries
2674558
redo buffer allocation retries
83
redo buffer allocation retries : indique le nombre d attente avant dcrire dans le redo log buffer.
Select 100*(a.value/b.value) "redo buffer retries ratio" from v$sysstat a, v$sysstat b
where a.name='redo buffer allocation retries'
and b.name='redo entries'

redo buffer retries ratio


----------------------------0,003102836

27

Base de Donnes avances

Attente due la non disponibilit du fichier redo log

Select name, value from V$SYSSTAT where name='redo log space requests'
NAME
VALUE
-----------------------------------------------------------------redo log space requests
64

28

Base de Donnes avances

STATPACK
Un outil de diagnostic.
Il enregistre un grand nombre de donnes relatives aux performances.
Calcul les ratios de performance.
Il enregistre dans un schma permettant une utilisation ultrieure
Possibilit de faire une comparaison avec les donnes d excutions antrieures.
Installation
Lancer le script $ORACLE_HOME/rdbms/admin/spcreate.sql (cration du schma statpack et de user PERFSTAT)
Excution
SQL> connect perfstat/perfstet
SQL> execute statspack.snap
Analyse des rsultat
SQl>@spreport

29

Base de Donnes avances


STATSPACK report for
DB Name
---------Test

DB Id
----------204079298

Instance
---------ORCL

Inst Num
-------1

Start Id
End Id
Start Time
-------- -------- -------------------1
2 25-Sep-00 00:36:21
Cache Sizes
~~~~~~~~~~~
db_block_buffers:
8192
db_block_size:
2048
log_buffer:
163840
shared_pool_size:
15728640

Release
---------8.1.5.0.0

OPS
---NO

End Time
-------------------25-Sep-00 00:38:10

Host
---------azuro
Snap Length
(Minutes)
----------1.82

Load Profile
~~~~~~~~~~~~
Per Second
--------------Redo size:
4,893.39
Logical reads:
37.88
Block changes:
22.23
Physical reads:
4.26
Physical writes:
7.16
User calls:
0.02
Parses:
2.04
Hard parses:
0.06
Sorts:
0.35
Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Buffer Nowait Ratio:
100.00
Buffer Hit
Ratio:
88.76
Library Hit
Ratio:
94.08
Redo
NoWait Ratio:
99.69
In-memory Sort Ratio:
94.74
Soft Parse Ratio:
96.85
Latch Hit Ratio:
100.00

Per Transaction
--------------533,380.00
4,129.00
2,423.00
464.00
780.00
2.00
222.00
7.00
38.00

30

Base de Donnes avances

TOAD
(Outil d administration)

31

Base de Donnes avances

32

Base de Donnes avances

BIBLIOGRAPHIE
Oracle 8i DBA LONELY.K., THERIAULT.M Oracle Press.
Optimisation des performances sous Oracle - GAJA KRISHNA, VAIDYANATHA, KIRTIKUMAR Oracle Press.
Oracle 9i sous Linux - BRIARD.G Eyrolles
Oracle OCP Oracle9i database: FundamentalsI-II Exam Guides.
C.Shallahammer, Direct Contention Identification Using Oracle s Session wait Tables
C.Millsap, Oracle Performance problem Diagnossis
www.hotsos.com
www.oraperf.com
technet.oracle.com/deploy/performance/
www.orapub.com

33

Base de Donnes avances

Questions ?

34

Vous aimerez peut-être aussi