Analyser les données AWR avec python
Depuis la 10g, l’interface de la dbconsole et d’enterprise manager permettent d’avoir une vision synthétique de la marche d’une base de données. Dans le cadre du tuning, il arrive parfois que ces informations soient insuffisantes et nécessites une analyse complémentaire des données AWR ou Statspack.
Un graphique étant plus parlant que 1000 mots, il est souvent plus efficace d’analyser ces données sous forme de graphique. Beaucoup de languages permettent de réaliser des graphes à la volée mais il y en a un particulièrement riche, c’est le language Python et sa librairie Matplotlib. Matplolib offre une bibliothèque de graphiques 2D très impressionnante. Dans cet article, je vais vous présenter comment installer matplotlib et l’utiliser pour générer un graphe à partir de données AWR.
Etape 1: Installation de Matplotlib sur CentOS5, Redhat EL5 ou Oracle EL5
Installer les modules python-dev et devel
$ yum install python-dev python-devel
Installer numpy
Télécharger numpy
$ su - root $ tar -xvzf numpy-1.2.1.tar.gz $ cd numpy-1.2.1 $ python setup.py build $ python setup.py install
Installer libpng
$ yum install libpng*
Installer Freetype
Télécharger Freetype
$ su - root $ tar -xvzf freetype-2.3.8.tar.gz $ cd freetype-2.3.8 $ make $ make install
Installer Matplotlib
Télécharger le matplotlib
$ su - root $ tar -xvzf matplotlib-0.98.5.2.tar.gz $ cd matplotlib-0.98.5.2 $ python setup.py build $ python setup.py install
Installer cx_oracle
Télécharger le rpm de cx_oracle .
Le module à installer est fonction de la version de la base de données et de python.
$ su - root $ rpm -ivh cx_Oracle-5.0.2-10g-py24-1.i386.rpm
Installer un client Oracle
La dernière étape est l’installation d’un client Oracle car le module cx_oracle passe par sqlnet.
Etape 2: Générer un graphe matplotlib à partir des données AWR
Créer d’abord le fichier oraplot.py
#!/usr/bin/python
import cx_Oracle
from pylab import *
x = []
y = []
# connexion a la base
strconnect='system/manager@dba1'
connection = cx_Oracle.connect(strconnect)
# releve des donnees awr
cursor = connection.cursor()
cursor.execute("""
select newreads.snap_id,abs(round((newreads.value-oldreads.value))) val
from dba_hist_sysstat oldreads,dba_hist_sysstat newreads
where
newreads.snap_id between :arg_2 and :arg_3
and oldreads.snap_id =
(select max(snap_id) from DBA_HIST_SNAPSHOT where snap_id < newreads.snap_id)
and oldreads.stat_name = :arg_1
and newreads.stat_name = :arg_1
order by newreads.snap_id""",
arg_1 = "redo size",arg_2 = 50, arg_3 = 90)
for column_1, column_2 in cursor:
x.append(column_1)
y.append(column_2/1024/1024)
cursor.close()
connection.close()
# generation du graphe
figure(figsize=(40, 20))
plot(x,y,'bo-',linewidth=2)
savefig('ora1.png')
Générer le graphique :
$ . oraenv dba1 $ chmod u+x oraplot.py $ ./oraplot.py
Et voilà ! Vous obtenez une image ora1.png qui permet de suivre l’évolution de la charge au niveau des redo logs de votre base de données comme ci-dessous :

Il vous suffit ensuite d’écrire de nouvelles requêtes et d’utiliser toute la puissance de MatPlotLib; Vous pourrez vous rendre compte, par vous, de ce qu’il est possible de faire en visitant la galerie qui leur est dédiée.


Excellent
Merci bcp
SI vous voulez voir des graphes professionnels faits à partir de AWR allez sur ce
site http://www.zion-dba.com
merci pour l’article , trés intéresant