Fonctionnement et Tuning de la SGA sous Oracle

34
Base de Données avancées 1 Fonctionnement et Tuning de la SGA sous Oracle TOUAMI Khaled

description

Fonctionnement et Tuning de la SGA sous Oracle. TOUAMI Khaled. Plan. Structure d ’une base de données Oracle Architecture technique d’une base Oracle System Global Area (SGA) Fonctionnement Optimisation Statpack TOAD. Structure d’une base Oracle. Définitions Base de Données(database) - PowerPoint PPT Presentation

Transcript of Fonctionnement et Tuning de la SGA sous Oracle

Page 1: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

1

Fonctionnement et Tuning de la SGA sous Oracle

TOUAMI Khaled

Page 2: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

2

Plan

• Structure d ’une base de données Oracle• Architecture technique d’une base Oracle• System Global Area (SGA)

– Fonctionnement– Optimisation

• Statpack• TOAD

Page 3: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

3

Structure d’une base Oracle

Instance Oracle

SGA Processes

Base de donnéesOracle

Page 4: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

4

Définitions

Base de Données(database)

Ensemble de fichiers de données (data files), des fichiers de contrôle(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 ’arrière-plan associés et les structures correspondantes de mémoire partagée. Elle est transitoire est crée à chaque démarrage d ’instance.

Page 5: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

5

Processus

DBWR( Database Writer)

• Transfert les blocs de données modifiées du data buffer dans les fichiers disque de la base de données.

• Le paramètre d ’initialisation DB_WRITERS_PROCESSES permet de démarrer plusieurs processus DBWR, afin d ’augmenter le taux d ’écriture sur disque.

LGWR(Log Writer)

• Écrit les données modifiées depuis la zone mémoire redo-log buffer dans les fichiers redo-log.

CKPT(Checkpoint)

• Signe à des intervalles réguliers, le moment d ’écriture des données modifiées dans la SGA dans les fichiers de la base de données.

• Il modifié l’ensemble des fichiers qui composent la base de données, pour que le numéro d ’ordre du plus récent checkpoint soit inscrit en en-tête de fichier.

SMON(System Monitor)

• Surveille la base de données lors de son démarrage, puis au cours de son fonctionnement.

PMON(Processus Monitor)

• Nettoie les transactions défaillantes, comme celle d ’un poste client arrêter brutalement durant une transaction (zonez allouées libérées, les verrous posés sont supprimés, les ressources affectées sont annulées).

Vues : V$bgprocess

Page 6: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

6

Data Buffer Cache

Redo-Log Buffer

Data Dictionnary Cache

Shared Pool

Library Cache

SGA

Processus SNPnnn

Processus Pnnn

Processus LCKnn

PMONSMONLGWRDBWR

CKPT

Démarrage/arrêt de l’instance

Processus dédié à unutilisateur

Processus dédié à unutilisteur

ListenerOracle Net

Fichier Init.oraFichiers de

contrôle

Archivage desfichiers Redo-Log

ARCH

Fichiers Redo-Log

Fichiers dedonnées

FichiersListener.ora

Programmeutilisateur

Programmeutilisateur

FichiersTNSNAMES.

ORA

Réseau

Architecture Technique

Page 7: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

7

System Global Area (SGA)

Définition : C ’est une zone mémoire qui regroupe un ensemble de structures de mémoire partagées qui contiennent les données, et les informations de contrôle le plus souvent utilisées d ’une instance oracle.

Elle comprend :

• Shared Pool Area

• Data buffer Cache

• Redo-log Buffer

Volume initial de la SGA : La SGA doit représenter au moins 2% de la taille totale de la base de données (physique).Elle est repartie comme suit :

• 50% Cache de données (database buffer cache)• 40% Shared Pool • 10% Redo Log Buffers

Espace libre dans la SGA : Pour connaître 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 différents indicateurs ratios d ’analyse correspondants aux différentes partis de la SGA.

Page 8: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

8

Shared Pool Area

Définition : C ’est une partie de la SGA dans laquelle les instructions SQL, les procédures stockées et les informations spécifiques du dictionnaire sont enregistrées en mémoire.

Elle est gérée au moyen d ’un algorithme LRU (Least Recently Used).

Elle comprend :

• Library cache : il contient le code SQL des instructions et les plans d ’exécutions associés , les blocs PL/SQL et des classes Java.

• Dictionary cache : contient des méta données issues du dictionnaire de données décrivant la structure et la sécurité de tous les objets inclus dans les instructions SQL récemment utilisées.

Paramètres :

• SHARED_POOL_SIZE : Définit la taille du pool partagé, en octets.

•SHARED_POOL_RESERVED_SIZE : Réserve une part du pool partagé pour des objets de grande taille ( package, procédure, fonction).

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

Page 9: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

9

Analyse du code SQL

SGA

Parse

Execute

Fetch (Select)

Requêteutilisateur

Use

r Pro

ce

ss

Se

rver P

roc

es

s1

3

2

Page 10: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

10

PARSE : • Vérification de la syntaxe de l ’instruction SQL.

• Réalisation de la résolution d ’objets et les contrôles de sécurité pour l ’exécution du code.

• Construction de l’arbre d’analyse

• Développement du plan d ’exécution pour l’instruction SQL.

EXECUTE :

• Application du plan d ’exécution.

•Lecture des blocs de données du fichier en mémoire.

• Manipulation des données en mémoire (Insert, Update, Delete).

FETCH : (select)

• Renvoie des lignes au processus utilisateur.

Page 11: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

11

Qu ’est ce qui l ’optimisation

C ’est un ensemble d ’actions de modifications ciblés au niveau des composants de la base de données pour atteindre des objectifs de performance, c ’est à dire augmenter le débit et réduire les temps de réponse.

Finalité : Satisfaction des utilisateurs.

Méthodologie d ’optimisation

1. Définition 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 système d ’exploitation.

5. Optimiser les composants concernés (Application, Instance , Base de données, E/S, OS).

6. Application des procédures de contrôle des changements,

7. Mesurez et documenter les performances actuelles,

8. Répétez les étapes 3 à 7 jusqu ’à ce que les objectifs soient atteintes.

Page 12: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

12

Optimisation de la Shared Pool Area

Les principaux problèmes liés aux performances du pool partagé:

• Utilisation intense des ressources CPU, causé par des analyses excessives.

• Erreur ORA-4031 : manque de place mémoire.

Mesures de performance

a)- library cache

La vue V$LIBRARYCACHE contient l’ensemble des informations relatives aux activités de la library cache depuis le dernier démarrage de l ’instance.

Page 13: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

13

DESC V$LIBRARYCACHE

Nom de la colonne Null? Type------------------------------ -------- ----NAMESPACE VARCHAR2(15)GETS NUMBERGETHITS NUMBERGETHITRATIO NUMBERPINS NUMBERPINHITS NUMBERPINHITRATIO NUMBERRELOADS NUMBERINVALIDATIONS NUMBERDLM_LOCK_REQUESTS NUMBERDLM_PIN_REQUESTS NUMBERDLM_PIN_RELEASES NUMBERDLM_INVALIDATION_REQUESTS NUMBERDLM_INVALIDATIONS NUMBER

Page 14: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

14

Get : Désigne le nombre de requêtes pour un ou plusieurs éléments du cache de bibliothèque.

Gethit : Le nombre de fois qu ’un objet à été trouvé en mémoire.

Gethitratio : C ’est le rapport entre le Gethits et le Gets.

Pins : le nombre d ’exécutions d ’un élément donné.

Pinhits : le nombre de fois qu ’un élément a été exécuté en mémoire.

Pinhitratio : C ’est le rapport entre le Pinhits et le Pins.

Reloads : le nombre de manqués ( nombre de demandes infructueuses ayant nécessité un rechargement en cache.

Page 15: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

15

select NAMESPACE , gets, gethits, gethitratio, pins, pinhits, pinhitratio,reloads from v$librarycacheorder by 1

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

Page 16: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

16

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 paramètre SHARED_POOL_SIZE

Nombre d ’analyse réalisées

Select STATISTIC#, NAME , VALUE from v$sysstatwhere name like 'parse count%'

STATISTIC# NAME VALUE ---------- ---------------------------------- ---------------- 152 parse count (total) 960796 153 parse count (hard) 98815

Page 17: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

17

Reload ratio : C ’est le pourcentage d ’exécutions qui ont nécessité 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$librarycachewhere namespace = 'TRIGGER'

EXECUTIONS MISSES RELOAD RATIO--------------------------------------------------------- 337 87 ,258160237

Si la valeur du reload-ratio > 1, On augmente la valeur du paramètre SHARED_POOL_SIZE.

Page 18: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

18

Identification des objets de grande taille

Select name, type, loads, executions from v$db_object_cachewhere type in ('PACKAGE', 'PACKAGE BODY','FUNCTION','PROCEDURE')and owner like 'AGNES ’

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

Remarque : Lorsqu ’une procédure incluse dans un package est appelée, c ’est l ’ensemble du package qui chargé en mémoire et analysé.

Page 19: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

19

B)- Dictionary Cache

desc v$rowcacheNom de la colonne Null? Type------------------------------ -------- ----CACHE# NUMBERTYPE VARCHAR2(11)SUBORDINATE# NUMBERPARAMETER VARCHAR2(32)COUNT NUMBERUSAGE NUMBERFIXED NUMBERGETS NUMBERGETMISSES NUMBERSCANS NUMBERSCANMISSES NUMBERSCANCOMPLETES NUMBERMODIFICATIONS NUMBERFLUSHES NUMBERDLM_REQUESTS NUMBERDLM_CONFLICTS NUMBERDLM_RELEASES NUMBER

PARAMETER: Nom de de l ’élément de dictionnaire de données.GETS : Cumul des demandes d’informations sur l’élément.GETMISSES : Cumul des demandes manqués sur l ’élément

Page 20: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

20

SQLWKS> select parameter, gets, getmisses, (gets-getmisses)/(gets) "HIT RATIO" ,modifications from v$rowcachewhere gets != 0

PARAMETER GETS GETMISSES HIT RATIO MODIFICATI-------------------------------- ---------- ---------- ---------- ----------dc_free_extents 90595 952 ,989491694 1585dc_used_extents 2609 825 ,683786892 1691dc_segments 160997 78607 ,511748666 1254dc_tablespaces 12486 56 ,995514977 0dc_tablespace_quotas 78 15 ,807692308 50dc_users 157370 43 ,999726759 2dc_rollback_segments 3091309 52 ,999983179 41dc_objects 182943 128284 ,298776122 377dc_constraints 26 15 ,423076923 26dc_object_ids 115365 13330 ,88445369 108dc_synonyms 670 120 ,820895522 0dc_sequences 35 3 ,914285714 17dc_usernames 142586 26 ,999817654 2dc_database_links 2 2 0 0dc_histogram_defs 76787 30591 ,601612252 9856dc_profiles 123 1 ,991869919 0dc_user_grants 136588 42 ,999692506 0

Dictionary cache hits-ratios

Page 21: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

21

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 KeepingPour améliorer 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 fixés

Select Owner, Name, Type, Sharable_mem, Kept from V$DB_OBJECT_CACHE where Type in (‘FUNCTION ’,’PACKAGE’,’PACKAGE BODY ’, ’PROCEDURE’)

Order by Owner, Name

Page 22: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

22

DATABASE BUFFER CACHE

1)-Fonctionnement

• Les données sont écrites en mémoire par blocs (si elles ne s ’y trouvent pas déjà) avant de pouvoir être manipulées en lecture ou en écriture.

• La quantité de mémoire disponible pour enregistrer ces blocs est limitée, de telle sorte que des blocs doivent être remplacés par des blocs plus récents en suivant un mécanisme de gestion appelée algorithme LRU.

• Un bloc est dit « dirty »si son contenu a changé. Oracle n ’autorise pas de nouvelle données à prendre cette place, tant que ce contenu n’a pas été écrit sur disque.

• Une fois le bloc écrit sur le disque, il devient disponible pour être réutilisé, il est dit « free ».

Exemple :

2)-Paramètres de configuration

• DB_BLOCK_SIZE (Taille d ’un bloc en octets)

• DB_BLOCK_BUFFER (Nombre de blocs qui peuvent être enregistrés)

- La taille d ’un bloc détermine la taille de chacun des buffers.

- La taille totale du cache de données = DB_BLOCK_BUFFER * DB_BLOCK_SIZ .

Page 23: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

23

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 données d ’oracle a été capable de renvoyer la valeur par une lecture logique plutôt 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 dbwhere 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 données

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’)

Page 24: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

24

c)-Les évènements d’attente

Pour déterminer les évènements d ’attentes qui affectent le cache de données, on interroge la vue V$SESSION_WAIT.

Select SW.Sid, S.Username, Substr(SW.Event,1,35), SW.Wait_Timefrom V$SESSION S, V$SESSION_WAIT SWwhere SW.Event not like 'SQl*Net%'and SW.Sid=S.SidOrder by SW.Wait_Time, SW.Event

Les évènements d ’attente courants relatifs au cache de données

Buffer busy waits : Indique une attente d ’un buffer dans le cache de la base de données.Free buffer waits : Manque de buffers libres dans le cache de donnéesDb file sequential read : Signale des attentes associées à une lecture excessif d ’index.Db file scattered read : Signale des attentes associées à un balayage complet d ’une table.

Sources d’informations

V$WAITSTAT, V$SYSTEM_EVENT, V$SESSION_WAIT, STATPACK REPORT

Page 25: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

25

Redo Log Buffer

1)-Fonctionnement

• Un processus utilisateur lance une instruction DML.

• Oracle affecte un identificateur de transaction à cette opération.

• Le processus serveur associé au processus utilisateur transfère en mémoire les données nécessaires, puis verrouille les lignes concernées 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 données.

• Le processus serveur écrit dans le redo log buffer l ’image qui suit la transaction (after image).

• Les données de redo log buffer sont transcrit sur disque lorsque survient l ’un des évènements suivants:

• Chaque fois qu ’une période de trois secondes s ’est écoulée.

• Lors d ’un commit.

• Lorsque l ’expression MIN(1MB, LOG_BUFFER/3) est vérifiée.

• Au moment des Checkpoints,

• Lorsqu ’il est déclenché par le processus DBWR

Page 26: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

26

B)-Paramètres de configuration

• LOG_BUFFER (Définit la taille en octets)

C)- Les évènements d ’attentes liés au redo log buffer

• Log buffer space : Indique un problème potentiel du LGWR.

• Log file parallel write : Signale une attente liée à l ’écriture de journaux sur le disque.

• Log file sync : Signale des attentes liées à un vidage du journal lors de la validation (commit) par un utilisateur.

Page 27: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

27

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 2674558redo buffer allocation retries 83

redo buffer allocation retries : indique le nombre d ’attente avant d’écrire 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

Page 28: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

28

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

Page 29: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

29

STATPACK• Un outil de diagnostic.

• Il enregistre un grand nombre de données relatives aux performances.

• Calcul les ratios de performance.

• Il enregistre dans un schéma permettant une utilisation ultérieure

• Possibilité de faire une comparaison avec les données d ’exécutions antérieures.

Installation

• Lancer le script $ORACLE_HOME/rdbms/admin/spcreate.sql (création du schéma statpack et de user PERFSTAT)

Exécution

• SQL> connect perfstat/perfstet

• SQL> execute statspack.snap

Analyse des résultat

• SQl>@spreport

Page 30: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

30

STATSPACK report for

DB Name DB Id Instance Inst Num Release OPS Host ---------- ----------- ---------- -------- ---------- ---- ---------- Test 204079298 ORCL 1 8.1.5.0.0 NO azuro Snap Length Start Id End Id Start Time End Time (Minutes) -------- -------- -------------------- -------------------- ----------- 1 2 25-Sep-00 00:36:21 25-Sep-00 00:38:10 1.82 Cache Sizes ~~~~~~~~~~~ db_block_buffers: 8192 db_block_size: 2048 log_buffer: 163840 shared_pool_size: 15728640 Load Profile ~~~~~~~~~~~~ Per Second Per Transaction --------------- --------------- Redo size: 4,893.39 533,380.00 Logical reads: 37.88 4,129.00 Block changes: 22.23 2,423.00 Physical reads: 4.26 464.00 Physical writes: 7.16 780.00 User calls: 0.02 2.00 Parses: 2.04 222.00 Hard parses: 0.06 7.00 Sorts: 0.35 38.00 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

Page 31: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

31

TOAD(Outil d ’administration)

Page 32: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

32

Page 33: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

33

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

Page 34: Fonctionnement et Tuning de la SGA sous Oracle

Base de Données avancées

34

Questions ?