OracleToolbox sous Linux, pour analyser vos perfs Oracle

L’objectif

Afin de creuser certaines baisses de perfs d’une base Oracle non loin de là, j’ai cherché un outil, si possible libre, pour obtenir facilement des infos du genre top-ten des requêtes les plus lancées, les plus longues, qui brassent le plus de données etc etc. Et de faire un EXPLAIN sur celles-ci pour trouver l’index qu’on a raté, l’algorithme pensé avec les pieds et ce genres de choses.

Comme Oracle est un lointain souvenir, je n’avais pas envie de me plonger dans la liste des tables V_$TRUC qui contiennent tout ceci, mais dont je n’ai aucune envie de me souvenir.

Quelques outils

Bilan, on trouve rapidement :

  • l’Enterprise Manager d’Oracle (java, lourd, chiant, façon Oracle tout simplement)
  • SpotLight de l’éditeur Quest Software (celui qui pond T.O.A.D). Ca balance du gros, mais c’est commercial, cher etc. Vu que tout est dans des tables et que j’ai simplement besoin d’un outil qui me présente ça lisiblement, c’est presque trop. M’enfin, si vous êtes fortunés, n’hésitez pas.
  • Enfin, OracleToolBox sur http://www.oracletoolbox.org/

La configuration de OracleToolbox

Je livre ici 2/3 détails sur l’installation de Oracle Toolbox, après avoir ramé un peu.
C’est rapide, mais ça vaut sûrement le coup d’être résumé :

Couche Oracle

Il faut d’abord avoir une couche cliente Oracle et PHP/OCI8 fonctionnelle. Ca tombe bien je l’ai décrit ici : https://michauko.org/blog/2009/05/07/installer-le-client-oracle-sur-debianlenny-interco-avec-php/

Installation

Facile, il suffit de dézipper, par exemple dans /var/www/oracletoolbox/.

Variables globales

Il faut activer le passage de variables globales. C’est le choix de codage qui est fait avec l’application. Côté PHP, il s’agit d’un paramètre sensible permettant éventuellement quelques failles de sécurité.
Donc 2 options s’offrent à nous :

  • la première, crade pour tester, c’est de passer à « On » la variable register_globals dans /etc/php5/apache2/php.ini
  • la deuxième sera plutôt d’intégrer cette modification uniquement pour le répertoire /var/www/oracletoolbox/, décrit ci-dessous avec au passage la restriction d’accès à l’outil par htaccess.

htpasswd & register_globals

Pour protéger l’accès à l’outil, je propose une conf spécifique pour ce répertoire (/var/www/oracletoolbox/) qu’on décrira par exemple dans /etc/apache2/conf.d/oracletoolbox :

<Directory /var/www/oracletoolbox>
        AuthName "Acces restreint"
        AuthType Basic
        AuthUserFile /etc/oracle/toolbox.htpass
        <limit GET POST>
                require user toolbox
        </Limit>
        php_value register_globals 1
        <Files *.ini>
                Order allow,deny
                Deny from all
        </Files>

</Directory>

A noter le « php_value », qui évite d’activer « register_globals » sur toute l’installation Apache/PHP. Donc de la restreindre à l’application OracleToolbox.
La restriction sur les fichiers ini évitera qu’un gros malin récupère les mots de passe.

Pour créer un mot de passe associé au compte « toolbox » dans le fichier /etc/oracle/toolbox.htpass (emplacement complètement arbitraire), il faut utiliser l’outil htpasswd, comme d’hab :

srv:/# htpasswd -bc /etc/oracle/toolbox.htpass toolbox mon_pass
Adding password for user toolbox
srv:/# cat /etc/oracle/toolbox.htpass
toolbox:76X12345jNUkI

Déclaration des bases, tnsnames, tout ça

Le fichier « INSTALL » fourni dans le package donne tous les pré-requis logiciels, en incluant les lib GD, PNG etc. Du facile à installer si vous n’avez pas ces modules (php5-gd etc).
Ce fichier donne surtout quelques indices sur le reste de la configuration Oracle.
Il faudra donc jeter en vrac tous les logins/passwd des comptes Oracle qui vous permettront d’accéder à vos bases, dans /var/www/oracletoolbox/pswd.ini. L’outil testera tout ce qu’il trouve, quelle que soit la base à laquelle vous vous connectez, en espérant qu’un marchera.
Au premier lancement de l’outil (http://votre.serveur/oracletoolbox/), il vous demandera aussi où est votre fichier « tnsnames.ora » qui décrit vos bases et lesquelles vous voudrez « installer », c’est-à-dire rendre accessible depuis OracleToolbox. En gros, il se refait une copie locale de celles qui vous intéressent parmi toutes celles de votre tnsnames.ora. Soit. Si vous avez suivi ma doc de mise en place d’Oracle sur Debian, citée plus haut, le fichier est /etc/oracle/tnsnames.ora.
Tout ceci est au final stocké dans /var/www/oracletoolbox/tnsnames. Au besoin ça s’édite à la main, ça va plus vite.

Voilà, normalement-ça-marche ™.

LE bug corrigé & version Windows autonome

Il existe une version autonome (portable ?) pour windows embarquant un apache, php et le code source. Bref tout ce qu’il faut pour lancer l’outil (il manque peut-être le client Oracle et configuration à faire avant). Ca marche bien. Juste que chaque utilisateur doit avoir tout ça en local, faire tourner momentanément un Apache sur son PC etc.

A côté de cette version Windows, il y a le zip des sources dont je parle depuis le début. Ca marcherait sûrement sur un Windows avec un environnement Apache/PHP/Oracle déjà mis en place d’ailleurs.
Dans cette version, il y avait un léger bug dans le packaging (dans le zip), l’auteur m’a confirmé ça ce matin, qui faisait qu’un champ RAW d’Oracle était mal interpreté par PHP. Bref, ça merdait. Normalement, le package est corrigé ce jour et vous n’aurez pas de problème.
Si toutefois vous voyez une réaction comme ci-dessous dans le top-ten des « Disk/Buffer intensive request », vous êtes concerné, prenez le code de l’autre zip (celui pour windows) ou retéléchargez les sources si vous l’avez fait avant la correction :

OracleToolbox avec RAWTOHEX manquant
OracleToolbox avec RAWTOHEX manquant

Pour en avoir le coeur net, cherchez « rawtohex » dans « fonction_oracle.php ». Si ça n’y est pas, c’est pas bon.

Allez, bonne analyse de perfs

2 comments

  1. Le code utilise argv pour le passage de variable. Depuis un moment déjà, Debian a modifié la valeur par défaut de register_argc_argv à Off, ce qui fait qu’on n’arrive plus à passer dans l’URL la base sur la quelle on veut se connecter.
    Donc, penser à modifier register_argc_argv, avec register_globals aussi.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.