Sauter au contenu

Analyser les données AWR avec python

15 septembre 2009
by

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 :

Graphic d'Utilisation des Redo Log
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.

2 Commentaires laisser un →
  1. 18 novembre 2009 12:28

    Excellent :-) Merci bcp ;-)

  2. 17 juillet 2011 08:33

    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

Répondre

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Gravatar
Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Twitter picture

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Connexion à %s

Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 36 followers