mardi 12 novembre 2013

Instance Caging

Nous avons tendance à croire que le paramètre « cpu_count » de la base de données permet de restreindre le nombre de processeurs que la base de données peut utiliser, et ce n’est évidemment par le cas. On doit s’en remettre à d’autres fonctionnalités telles qu l’ « Instance caging » disponible avec Oracle Database Entreprise Edition 11g Release 2.

Instance Caging est un outil permettant de gérer et de limiter l’utilisation de processeurs par base de données. L’ « Instance caging » est particulièrement intéressant car il protège les bases de données qui se partagent des ressources d’être impacter par une base de données dont des processus exigeant et gourmand s’approprient l’ensemble des ressources et, qui a pour effet d’ébranler tous les systèmes desservis par celles-ci.

Une stratégie pour déterminer le nombre de processeurs par instance est d’activer  l’ « instance caging » puis de surveiller l’utilisation des processeurs par l’instance. Ceci peut être fait via cette requête :
select to_char(begin_time, 'HH24:MI') time,
       max(running_sessions_limit) cpu_count,
       sum(avg_running_sessions)
       avg_running_sessions,
       sum(avg_waiting_sessions)
       avg_waiting_sessions
  from v$rsrcmgrmetric_history
 group by begin_time
 order by begin_time;
Grâce aux résultats obtenus lors de l’exécution de la requête, on peut se baser sur ceci :
·        Si la valeur de la colonne « avg_running_sessions » est fréquemment inférieure à la valeur du « CPU_COUNT », cela nous indique que nous pouvons diminuer la valeur de « CPU_COUNT » sans impacter la performance.
·        Si la valeur de la colonne « avg_waiting_sessions » est constamment supérieure à la valeur du « CPU_COUNT » et que le temps réponse est en deçà des attentes, ceci indique que le CPU_COUNT est possiblement insuffisant et que la performance peut être accrue en augmentant sa valeur, en autant qu’il en a de disponible.
Après quelques jours, vous aurez des statistiques sur lesquelles vous pourrez vous baser pour restreindre le nombre de processeurs utilisés par une instance.
Pour la mise en place de l’ « instance caging », il suffit de faire ceci :
SQL> ALTER SYSTEM SET CPU_COUNT = 8 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DEFAULT_PLAN' SID=’*’ SCOPE=’BOTH’;
En utilisant le plan par défaut d’Oracle Resource Manager, il n’y aura pas d’impact car il n’y a aucune limitation.
Prendre note qu’il est mention de processeurs dans ce texte mais si vous avez des processeurs de type « Hyper-Threading », la valeur de « cpu_count » correspond plutôt à un nombre de « threads ».

La vue V$RSRCMGRMETRIC_HISTORY affiche l'historique des statistiques d'Oracle Resource Manager qui proviennet de la vue V$RSRCMGRMETRIC. Seulement la dernière heure est conservée. Cette vue fournit des informations sur l'utilisation des ressources et les temps d'attente par groupe de consommateur.

Vous pouvez consulter le lien ci-dessous. Il traite aussi de l'instance caging :
http://www.oracle-base.com/articles/11g/instance-caging-to-manage-cpu-usage-in-oracle-database-11gr2.php