Si les rapports AWR sont très utiles, il ne faut pas oublier que leur utilisation est soumise à licence (Enterprise Manager Diagnostic Pack) et réservée à la version Enterprise Edition.
Dans les autres cas (Standard Edition ou pas de licence Diagnostic Pack), il faut aller voir du coté de Statspack …
Statspack ?
Statpack permet de générer un rapport identique à AWR mais demande un peu plus de travail, à savoir:
- création d’un utilisateur dédié à statspack, idéalement avec un tablespace associé
- prise de snapshots à déclencher de façon manuelle, via un appel au script snap.sql ou en utilisant la procedure statspack.snap
- génération d’un rapport, via un appel au script spreport.sql
- purge des snapshots, via un appel au script sppurge.sql ou en utilisant la procedure statspack.purge
Tous les scripts se trouvent dans le répertoire $ORACLE_HOME/rdbms/admin
Automatiser l’utilisation
Lors de campagnes de stress tests, la durée des tests peut varier et il peut être intéressant d’automatiser la prise de snapshots à intervales réguliers. C’est ce que le script suivant se propose de faire.
Le script accepte 3 paramètres, le premier étant la durée totale du tir, en minutes et le deuxième l’intervalle de prise de snapshots statspack, en minutes également, le troisième paramètres correspond à une entrée du fichier tnsnames.ora.
Afin de pouvoir mettre en corrélation les rapports statspack et l’activité du système, le script lance également la commande vmstat et produit un fichier associé à chaque snapshot. Le script crée un nouveau répertoire pour chaque « run » et un rapport global est spoolé dans le fichier CR.txt.
#! /usr/bin/ksh Usage () { echo usage : $0 Duree-du-Tir Frequence-des-Snaps tnsentry echo tnsentry: entree tnsnames.ora de la base a surveiller exit 1 } # GetSnap DATABASE GetSnap() { sqlplus -s perfstat/perfstat@${1} <<EOF set heading off set feedback off select trim(max(snap_id)) from stats$snapshot; EOF } # Vérification des paramètres NPAR=3 [ $# -eq $NPAR ] || Usage case $1 in [0-9]*) : ;; *) echo Parametre 1 invalide ; Usage esac case $2 in [0-9]*) : ;; *) echo Parametre 2 invalide ; Usage esac DUREE=$1 SNAPFREQ=$2 export DATABASE=$3 VMFREQ=30 typeset -i VMITER SNAPWAIT RUNNUMBER LOOP [ ${SNAPFREQ} -gt ${DUREE} ] && { echo La durée du tir doit être supérieure a la fréquence des mesures exit 1 } DIV=${DUREE}%${SNAPFREQ} [ $DIV -eq 0 ] || { echo La durée du tir doit être un multiple de la fréquence des mesures exit 1 } tnsping ${DATABASE} || { echo La base ${DATABASE} n'existe pas ou est inaccessible exit 1 } # Lancement de la surveillance VMITER=2*${SNAPFREQ} SNAPWAIT=60*${SNAPFREQ} echo Declenchement d'un snap statspack toutes les ${SNAPWAIT} secondes avec ${VMITER} lignes de vmstat, 1 ligne toutes les ${VMFREQ} secondes RUNNUMBER=`ls Resultats|wc -l` let RUNNUMBER=RUNNUMBER+1 echo Collecte des statistiques dans le repertoire Resultats/${RUNNUMBER} RDIR=${HOME}/Resultats/${RUNNUMBER} LOOP=${DUREE}/${SNAPFREQ} mkdir ${RDIR} let numloop=0 echo "Collecte des statistiques sur la base ${DATABASE} toutes les ${SNAPWAIT} secondes avec ${VMITER} lignes de vmstat, 1 ligne toutes les ${VMFREQ} secondes " > ${RDIR}/CR.txt tnsping ${DATABASE} >> ${RDIR}/CR.txt echo Debut des mesures a `date "+%Y/%m/%d %H:%M:%S"` >> ${RDIR}/CR.txt while [ ${numloop} -lt ${LOOP} ] do let numloop=numloop+1 sqlplus -s perfstat/perfstat@${DATABASE} @${HOME}/SQL/snap echo Prise de mesure ${numloop} a `date "+%Y/%m/%d %H:%M:%S"` >> ${RDIR}/CR.txt X=`GetSnap ${DATABASE}|awk 'NR == 2 { print $1; }'` vmstat ${VMFREQ} ${VMITER} > ${RDIR}/vmstat.${numloop}.snap.${X} & sleep ${SNAPWAIT} done let numloop=numloop+1 sqlplus -s perfstat/perfstat@${DATABASE} @${HOME}/SQL/snap echo Prise de mesure Finale a `date "+%Y/%m/%d %H:%M:%S"` >> ${RDIR}/CR.txt X=`GetSnap ${DATABASE}|awk 'NR == 2 { print $1; }'` echo Snap Final : $X >> ${RDIR}/CR.txt echo Fin des mesures a `date "+%Y/%m/%d %H:%M:%S"` >> ${RDIR}/CR.txt
2 réflexions sur “Automatiser Statspack”
Pourquoi ne pas utiliser spauto.sql et dbms_job.remove ?
spauto.sql n’est pas très flexible, la prise de snapshots est faite toutes le heures.
Le script est prévu pour une résolution inférieure à une heure, et une corrélation entre les snapshots et la trace système (vmstat)
Les commentaires sont fermés.