Introduction :
Dans le cadre d’une mission chez l’un de nos clients, une petite PME de la région parisienne , qui rencontrait une baisse de performance au niveau de sa base de production.
J’ai mis en place l’outil gratuit d’oracle afin d’étudier la provenance de cette baisse de performance .
Il est à noter qu’il existe un autre outil ( oracle tunning pack) permettant de proposer les recommandations et de trouver la root cause de la baisse de performance, malheureusement il est payant.
QU’EST CE QUE PERFSTAT :
L’utilitaire PERFSTAT est nécessaire aux bases de données de production . il permet de stocker les performances et les statistiques de la base sous la forme d’une prise d’image appelée SNAPSHOT.
Il permet aussi de comparer ces SNAPSHOTS deux à deux.
Avoir un rapport à un instant t va nous donner des informations sur des requêtes coûteuses
L’installation se décompose en 3 étapes:
1) création du tablespace par défaut :
sinon oracle va utiliser le tablespace sysaux comme table par defaut
SQL> create tablespace PerfStat datafile ‘/oracle/oradata/orcl/Perfstat.dbf’
2 size 200M autoextend ON next 50M maxsize 1G;
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
——————————
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
PERFSTAT
APPL
2) Installation :
ci-dessous un petit script d’installation :
sqlplus / as sysdba << _EOF_
define perfstat_password=perfpass
define default_tablespace=PERFSTAT
define tempory_tablepace=temp
@/soft/oracle/product/db/10.2.0/rdbms/admin/spcreate.sql
_EOF_
Le script spcreate.sql éxecute 3 autres scripts
- spcusr.sql ==> Création de l’utilisateur PERFSTAT et accorder droits nécessaires
- spctab.sql ==> Création des tables
- spcpkg.sql ==> création du package
3) post-installation
Une fois l’installation terminée, il est fortement conseillé d’aller jeter un oeil dans le fichier de log
- Pour info, il y a trois fichiers de log (et 1 par script)
- spcusr.lis
- spctab.lis
- spcpkg.lis
4) Déinstallation :
rien de plus simple :
executer le script
@/soft/oracle/product/db/10.2.0/rdbms/admin/spdrop.sql
et supprimer aussi le tablespace .
5) Prendre un cliché :
encore un petit script pour prendre un cliché
sqlplus -s perfstat/perfpass << _EOF_
exec statspack.snap;
_EOF_
Il est conseillé d’automatiser la prise des clichés à une frequence de 30 min :
un petit script qui va faire cela
DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X, what => 'statspack.snap;', next_date => SYSDATE+30/1440, interval => 'SYSDATE+30/1440', no_parse => FALSE ); END; /
6) calcul des statistiques:
sqlplus -s perfstat/perfpass << _EOF_
exec dbms_utility.analyze_schema(‘PERFSTAT »,’COMPUTE’);
_EOF_
7) suppression de donnée :
script de suppression de donnée entre deux SNAPSHOTS:
lemin=$(sqlplus -s perfstat/perfpass << EOF select min(snap_id) MIN from perfstat.stats\$snapshot ;
EOF
)
lemax=$(sqlplus -s perfstat/perfpass << EOF select max(snap_id) MAX from perfstat.stats\$snapshot ;
EOF
)
echo « *************************DEBUT********************* »
echo »Choisissez deux valeurs entre le min et le max »
echo « $lemin »
echo « $lemax »
echo « Entrez une valeur minimal »
read lemin
echo « Entrez une valeur maximal »
read lemax
sqlplus -s perfstat/perfpass << _EOF_
define losnapid=$lemin
define hisnapid=$lemax
@/soft/oracle/product/db/10.2.0/rdbms/admin/sppurge.sql
_EOF_
Génération de rapport perfstat:
@?/rdbms/admin/spreport.sql
- La ,on obtient la liste des clichés avec le SNAP Id et la date et heure du cliché. Ce qui peut être pratique.
- Le jour ou l’on vous dit que « ça a ramé » le 12 entre 15 heures et 16 heure, il suffira d’identifier les snap id correspondants.
- Pour faire un rapport, il faut deux clichés.
- On répond à la question posée:
Entrez une valeur pour begin_snap: Entrez une valeur pour end_snap : Entrez une valeur pour report_name : Il faut en fait indique chemin + nom (ex:c:\temp\report.log)
statspackanalyzer
- il existe un outil d’analyse de rapport statspack ici : http://burleson-dba.com/SP/
Voilà j’espère que cela vous sera utile .