Principe
AWR (ou Automatic Workload Repository) est un référentiel (ou dépôt) qui stocke un historique des informations utiles pour l’optimisation. A intervalle régulier, des snapshots de la base (statistiques, charge, …) sont stockés dans l’AWR via le processus MMON. C’est en quelque sorte un référentiel qui stocke un historique des informations utiles pour l’optimisation.
Les données ne servent pas qu’à la génération de ces rapports ; AWR est un point d’entrée dans un processus plus complet de détection des problèmes de performance et l’assistance à leurs corrections, notamment via le moteur d’auto-diagnostique ADDM (ou Automatic Database Diagnostic Monitor).
Configuration des snapshots
Sous l’utilisateur oracle, effectuer les opérations suivantes :
1 2 3 |
<root> # su - oracle <oracle> $ export ORACLE_SID = <SID> <oracle> $ sqlplus "/as sysdba" |
1 |
SQL> execute dbms_workload_repository.modify_snapshot_settings (retention=>40320, interval=>60); |
Dans cet exemple, la prise de snapshot est configurée toutes les heures (interval=>60) et les logs AWR sont conservés pendant une durée de 4 semaines (retention=>40320 (convertit en minutes)).
Remarque : La configuration par défaut est une prise de snapshot toutes les heures avec une durée de rétention de 7 jours.
Le package PL/SQL suivant DBMS_WORKLOAD_REPOSITORY utilisé ici est dédié à l’AWR. Via ses nombreuses procédures, il permet d’effectuer notamment, les opérations suivantes :
- Du paramétrage (fréquence des snapshots, durée de rétention) avec la procédure modify_snapshot_settings
- La création/suppression de snapshots avec create_snapshot et drop_snapshot_range
- La création/suppression de Baselines qui sont des périodes spécifiques (entre 2 snapshots) pour lesquelles on désire garder une référence.
Consultation de la configuration
Sous l’utilisateur oracle, effectuer la requête suivante pour lister la durée de rétention et l’intervalle des snapshots :
1 2 3 |
<root> # su - oracle <oracle> $ export ORACLE_SID = <SID> <oracle> $ sqlplus "/as sysdba" |
1 2 3 4 5 6 7 8 |
SQL> select extract( day from snap_interval) *24*60+ extract( hour from snap_interval) *60+ extract( minute from snap_interval ) "Snapshot Interval", extract( day from retention) *24*60+ extract( hour from retention) *60+ extract( minute from retention ) "Retention Interval" from dba_hist_wr_control; |
Lister les snapshots AWR qui sont historisés en base :
1 2 3 |
SQL> set lines 220 SQL> set pages 999 SQL> SELECT snap_id, begin_interval_time, end_interval_time FROM dba_hist_snapshot ORDER BY 1; |
Génération du rapport
Sous l’utilisateur oracle, , effectuer la requête suivante pour générer un rapport d’audit :
1 2 3 4 |
<root> # su - oracle <oracle> $ cd /tmp <oracle> $ export ORACLE_SID = <SID> <oracle> $ sqlplus "/as sysdba" |
1 |
SQL> @$ORACLE_HOME/rdbms/admin/awrrpti.sql |
Vous devez ensuite, répondre aux différentes questions pour permettre la personnalisation du rapport :
1 2 3 4 5 6 7 8 |
Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an HTML report, or a plain text report? Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' Entrez une valeur pour report_type : HTML Type Specified: html |
Définition du format final du rapport. Dans le cas présent, nous utiliserons un rapport au format HTML.
1 2 3 4 5 6 7 8 9 10 11 12 |
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 660527133 1 <SID> <SID> <hostname> 174682324 1 <SID> <SID> <hostname> 372116126 1 <SID> <SID> <hostname> Entrez une valeur pour dbid : 660527133 Using 660527133 for database Id Entrez une valeur pour inst_num : 1 Using 1 for instance number |
A ce stade, nous devons choisir sur quelle instance nous allons devoir travailler ainsi que du numéro de l’instance.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed. Pressing without specifying a number lists all completed snapshots. Entrez une valeur pour num_days : 3 Listing the last 3 days of Completed Snapshots Instance DB Name Snap Id Snap Started Snap Level -------- ------- ------- ------------------ ----- SGE2PRD SGE2PRD 1739 14 Nov. 2015 00:00 1 1740 14 Nov. 2015 01:00 1 1741 14 Nov. 2015 02:00 1 |
Nous devons maintenant définir quel intervalle de jours nous voulons visualiser.
1 2 3 4 5 6 7 |
Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entrez une valeur pour begin_snap : 1739 Begin Snapshot Id specified: 1739 Entrez une valeur pour end_snap : 1741 End Snapshot Id specified: 1741 |
Saisir les valeurs des ID pour lesquels, vous voulez visualiser le rapport.
1 2 3 4 5 6 7 8 |
Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_1748_1750.html. To use this name, press to continue, otherwise enter an alternative. Entrez une valeur pour report_name : awrrpt_1_1748_1750.html Using the report name awrrpt_1_1748_1750.html |
Le rapport est maintenant généré dans le répertoire tmp, le récupérer sur le poste de travail puis procéder à l’analyse de celui-ci.
Pour plus d’explications sur le fonctionnement du package, se reporter à la documentation suivante : ici
Merci pour cet article, qui à l’air de coller parfaitement à mes besoins ! (au fait, 5ème résultat sur Google pour « oracle awr reports », BG!)
Je teste ça dans les prochains jours, et je te dis si ça fonctionne aussi bien que promis. 🙂
Par contre, tu as déjà extrait des données de performances à partir de fichiers traces? Quelque chose dans ce genre là :
https://oracle-base.com/articles/misc/sql-trace-10046-trcsess-and-tkprof
Le besoin serait de loguer pendant un test de perf les infos disponibles sur le monitoring live de SQLDeveloper (http://www.thatjeffsmith.com/wp-content/uploads/2015/05/fx_viewer.gif), pour les analyser ensuite.
Je ne m’y attendais pas, ça fait plaisir!
Dans le cadre du test de performance, je n’ai pas extrait ces données typiquement, mais cela doit sûrement être faisable.
Pour le monitoring live et stockage, j’utilisais un autre soft qui maintenant n’existe plus (paix à son âme : Insider).
Tiens, au fait, il me semble que
instance , c’est pas très standard…
ORACLE_SID=, c’est plus joli ! 🙂
Merci pour ce retour Stan 🙂
Effectivement, c’est un reste de prestation ça! On ne devrait pas voir ça ici, je vais corriger l’article de suite!
Merci pour cet article très instructif !