Utiliser la métrologie AIX pour vos bases de données

L’objectif de cet article est de vous montrer comment définir une métrologie sous AIX permettant dans une même partition AIX d’avoir les consommations de pourcentage CPU, mémoire et disque de chaque base de données ou bien de chaque service Oracle.
Il est intéressant de pouvoir mesurer le coût en terme de ressources d’une base de données par rapport à une autre ou bien de mesurer la même consommation à l’intérieur d’une base de données par services.
Généralités
Ces mesures sont possibles avec l’utilisation de l’outil AIX de gestion de la charge de travail appelé « WLM » (WorkLoad Manager). Le gestionnaire de la charge de travail (WLM) permet à l’administrateur système de mieux contrôler la procédure d’allocation des ressources aux processus par le planificateur et VMM (Virtual Memory Manager). WLM empêche également différentes classes de travaux d’interférer les unes avec les autres, et alloue des ressources en fonction des particularités inhérentes aux différents groupes d’utilisateurs.
Les « Classes » WLM
Le concept central du gestionnaire de la charge de travail (WLM) est celui de classe. Une classe est un groupe de processus (travaux) auquel s’applique un ensemble de limites d’utilisation des ressources. WLM attribue des processus aux différentes classes et contrôle l’allocation des ressources système entre les diverses classes en fonction de règles d’affectation. L’allocation des ressources systèmes s’effectue selon les partages et limites d’utilisation des ressources, définis par l’administrateur système pour chaque classe.
Les ressources gérées par WLM
WLM gère trois types de ressources :

  • L’utilisation de la CPU par les processus d’une classe : cette valeur s’obtient en ajoutant tous les cycles de la CPU consommés par chaque processus de la classe.
  • L’utilisation de la mémoire physique par les processus d’une classe : cette valeur s’obtient en ajoutant l’ensemble des pages mémoire appartenant aux processus de la classe.
  • La largeur de bande des E/S disque pour la classe : cette largeur de bande (exprimée en blocs de 512 octets par seconde) inclut toutes les E/S générées par les processus de la classe, sur chaque périphérique de stockage auquel la classe a accédé.

Les modes actifs et passifs de WLM
WLM peut s’exécuter en mode actif (mode d’exploitation normal dans lequel WLM surveille et régule l’utilisation de la CPU et de la mémoire) ou en mode passif (mode d’exploitation dans lequel WLM classifie les processus et contrôle l’utilisation des ressources sans interférer avec les algorithmes standards d’allocation des ressources AIX). Dans notre cas d’usage, nous allons uniquement configurer WLM en mode passif car notre objectif est de mesurer et non pas de réguler.
Mise en place de la métrologie sur deux bases de données distinctes
Dans un premier temps, nous constatons que seules les classes WLM par défaut sont présentes. Les plus utilisées sont « Default » qui regroupe l’ensemble des processus utilisateurs lancés et « System » pour le noyau AIX :

(srv-aix-001) [root] /home/root > wlmstat
         CLASS    CPU    MEM   DKIO
  Unclassified   0.00   0.18   0.00
     Unmanaged   0.01  26.58   0.00
       Default   1.18  50.09   2.13
        Shared   0.00   7.18   0.00
        System   0.66  34.50   3.69
         TOTAL   1.84  91.95   5.82

Le mode passif de WLM doit être activé si besoin. Pour se faire, il faut utiliser les commandes suivantes sachant que l’option « -p » permet de basculer du mode actif vers le mode passif et inversement. L’option « -q » permet de visualiser le mode dans lequel on est… et il est très important de rester en mode passif :

(srv-aix-001) [root] /home/root > wlmcntrl -p
(srv-aix-001) [root] /home/root > wlmcntrl -q
1495-053 WLM is running in passive mode

La liste des classes actuelles peut être visualisée par la commande suivante, et l’on peut constater qu’aucune classe n’a été définie :

(srv-aix-001) [root] /home/root > lsclass -f
System:
        memorymin = 1
Default:
Shared:

Nous allons désormais lister les instances présentes dans la partition AIX. Nous constatons que les deux instances sont lancées avec des utilisateurs système différents « px6adm » et « bp1adm » :

(srv-aix-001) [root] /home/root > ps -ef|grep smon
  px6adm 10289240        1   0   Apr 07      -  0:35 ora_smon_PX6
  bp1adm 10289240        1   0   Apr 07      -  0:35 ora_smon_BP1

Notre objectif est donc de créer deux nouvelles classes « clPX6 » et « clBP1 ». Pour se faire, nous allons utiliser l’outil d’administration d’AIX « smitty » avec l’option « wlm » :

(srv-aix-001) [root] /home/root > smitty wlm

Puis sélectionner « Add a class » et renseigner le nom de la classe dans la zone « Class name » :

...
* Class name                                         [clPX6]
...

Puis, par la suite, il faut aller dans le menu « Class assignment rules » afin d’assigner une règle à la classe précédemment créée. Sélectionner le choix « Create a new Rule », puis saisir les informations de la classe. Dans notre exemple, on associe la classe à un utilisateur propriétaire des processus :

* Order of the rule                                  [1]                                                                                                                                             #
* Class name                                          clPX6                                                                                                                                      +
* User                                               [px6adm]                                                                                                                                       +
* Group                                              [-]                                                                                                                                            +
  Application                                        [-]
  Type                                               [-]                                                                                                                                            +
  Tag                                                [-]

On peut faire la même opération pour la seconde classe :

* Order of the rule                                  [2]                                                                                                                                             #
* Class name                                          clBP1                                                                                                                                      +
* User                                               [bp1adm]                                                                                                                                       +
* Group                                              [-]                                                                                                                                            +
  Application                                        [-]
  Type                                               [-]                                                                                                                                            +
  Tag                                                [-]

Afin de bien prendre en compte la création des nouvelles classes, il faut relancer l’outil WLM par la commande suivante :

(srv-aix-001) [root] /home/root > wlmcntrl –u

On peut voir immédiatement que les nouvelles classes sont présentes :

(srv-aix-001) [root] /home/root > lsclass -f
System:
        memorymin = 1
Default:
Shared:
clPX6:
clBP1:

La métrologie sur ces mêmes classes est alors automatiquement collectée :

(srv-aix-001) [root] /home/root > wlmstat
         CLASS    CPU    MEM   DKIO
  Unclassified   0.00   0.18   0.00
     Unmanaged   0.00  26.58   0.00
       Default   0.54   4.47   0.00
        Shared   0.00   7.18   0.00
        System   0.42  34.66   0.00
      clPX6   10.18  14.71   0.00
      clBP1   24.49  30.67   0.14
         TOTAL   1.63  91.87   0.14

L’outil système « topas » permet aussi la consultation de la métrologie Oracle :

(srv-aix-001) [root] /home/root > topas –W
Topas Monitor for host: srv-aix-001nterval: 2      Fri Apr 17 09:08:56 2015
WLM-Class (Passive)             CPU%      Mem%     Blk-I/O%
clBP1                        24.70     30.67         1.31
System                          0.59     34.76         0.00
clPX6                        10.12     14.86         0.00
Default                         0.03      4.48         0.00
Unmanaged                       0.01     26.58         0.00
Shared                          0.00      7.18         0.00
Unclassified                    0.00      0.18         0.00

Les processus peuvent être affichés avec les classes correspondantes :

(srv-aix-001) [root] /home/root > ps -ae -o pid,user,class,args,pcpu,vsz

Assignation d’un processus particulier à une classe
Il est possible d’affecter un processus à une classe de manière individuelle. Dans ce cas, on souhaite par exemple mesurer la consommation d’un processus en arrière-plan d’Oracle comme le « Log Writer » ou le « Database Writer ». Pour se faire, il faut connaitre l’identifiant système du processus et utiliser la commande d’affectation « wlmassign ». Dans l’exemple suivant, nous allons donc dans un premier temps créer une nouvelle classe, rechercher le processus « Log Writer », puis l’associer à la classe créée.
Création de la classe clLOGWRITER :

(srv-aix-001) [root] /home/root > smitty wlm
…
  Add a class
…
* Class name                                         [clLOGWRITER]
…

Relance des processus de gestion de la charge WLM

(srv-aix-001) [root] /home/root > wlmcntrl -u

Recherche sous SQL*Plus du numéro de processus et génération de la commande d’association avec la classe :

SQL>  select 'wlmassign -S clLOGWRITER  '||process command
from v$session where type='BACKGROUND' and program like '%LGWR%';
COMMAND
----------------------------------------------
wlmassign -S clLOGWRITER  9699558

Il est possible de lancer directement la commande afin de faire l’assignation du processus « log writer » directement à la classe concernée :

(srv-aix-001) [root] /home/root > wlmassign -S clLOGWRITER  9699558

On constate que la nouvelle classe apparait :

(srv-aix-001) [root] /home/root > wlmstat
         CLASS    CPU    MEM   DKIO
  Unclassified   0.00   0.18   0.00
     Unmanaged   0.00  26.58   0.00
       Default   0.54   4.47   0.00
        Shared   0.00   7.18   0.00
        System   0.42  34.66   0.00
      clPX6   8.74  14.71   0.00
      clBP1   28.84  30.67   0.14
      clLOGWRITER   1.58  0.93   0.08
         TOTAL   1.63  91.87   0.14

Enfin, la commande « wlmcheck » permet de vérifier l’ensemble de la configuration actuelle :

(srv-aix-001) [root] /home/root > wlmcheck
WLM is running in active mode, Rset bindings active.
Checking classes and rules for 'current' configuration...
System
Default
Shared
clPX6
clBP1
clLOGWRITER

Visualisation de la métrologie avec l’outil NMON
NMON est un outil permettant la collecte de l’ensemble des métriques AIX… et en particulier ceux du gestionnaire de charge WLM. Cet outil permet de générer sur l’intervalle de temps sélectionné un fichier qui pourra être par la suite analysé avec l’outil « NMON analyzer » que l’on peut facilement télécharger sur les sites d’IBM.
Commande de collecte de la métrologie avec l’option « W » permettant de sélectionner le gestionnaire de charge :

(srv-aix-001) [root] /home/root > nmon -fPAVYWdMO^-s 60 -c 240 -F monfichier.nmon -m $HOME

Visualisation de la consommation CPU (par exemple) à partir de l’outil NMON Analyzer :
nmon image
Et voilà… j’espère que cet article vous permettra de mettre en place cette fonctionnalité WLM pour vos bases de données, mais n’oubliez pas que le mode sélectionné doit impérativement être « passif » car il n’est pas souhaitable pour une base de données Oracle de modifier les priorités d’exécution des processus.
Si vous souhaitez d’autres informations sur les outils NMON, WLM ou partager votre retour d’expérience sur celui-ci, n’hésitez pas à me contacter, je me ferai un plaisir d’échanger avec vous sur ces sujets.