Developpez.com - Oracle
X

Choisissez d'abord la catégorieensuite la rubrique :


Les statistiques système

Avancé

Date de publication : 03 juin 2011.

Par fadace (Fabien Celaia)
 

Les statiques système permettent à Oracle de calibrer correctement son optimiseur par rapports aux ressources mises à sa disposition. Par défaut, Oracle propose des statistiques systèmes dites en "no-workload", calculées lors du démarrage de l'instance. Couplées à la virtualisation des ressources, de mauvaises statistiques peuvent alors avoir un impact très négatif sur les performances. Cet article a pour objectif de vulgariser ces statistiques fort peu connues.

       Version PDF (Miroir)   Version hors-ligne (Miroir)
Viadeo Twitter Facebook Share on Google+        



I. Introduction
II. Mise en place
II-A. Table d'historique
II-B. Job
III. Récupération des données
IV. Détermination des valeurs optimales
V. Modifier et fixer la valeur des paramètres
VI. Conclusion et remerciements


I. Introduction

Les statiques système permettent à Oracle de calibrer correctement son optimiseur par rapports aux ressources mises à disposition.

Il y a deux types de statistiques système:
Pour un système ayant des statistiques workload renseignées, les statistiques no-workload ne sont pas usitées.

Ce sont ces dernières qu'il convient de recalculer et de fixer après chaque modification de ressources pouvant les impacter, comme par exemple:

II. Mise en place


II-A. Table d'historique

Afin de ne pas impacter les statistiques actuelles avec les nouvelles collectées, il convient de ramasser les statistiques dans une table autre que celle par défaut. Dans cet exemple, je pars du principe qu'un schéma spécifique DBA est mis à notre disposition, ceci afin d'éviter de surcharger les schémas spécifiques à Oracle. Il va sans dire que vous pouvez créer cette table où bon vous semble.

exec dbms_stats.create_stat_table(ownname => 'DBA', stattab => 'SYSTEME_STATS') ;

II-B. Job

Création du job qui, chaque heure, calcule des nouvelles statistiques en workload. Là aussi, l'intervale de temps dépend de la réalité de vos systèmes de production.

declare vStatId varchar2(30);
begin
select 'S'||to_char(sysdate,'yyyymmddhh24miss') into vStatId from dual ;
dbms_stats.gather_system_stats('start', null, 'SYSTEME_STATS', vStatId, 'DBA');
dbms_lock.sleep(900);
dbms_stats.gather_system_stats('stop', null, 'SYSTEME_STATS', vStatId, 'DBA');
end;
/

III. Récupération des données

Les données sont extraites via les 2 commandes suivantes

select  t1.c2 as Debut, t1.c3 AS fin, t1.n1 AS sreadtim, t1.n2 AS mreadtim,
              t1.n3 AS cpuspeed, t1.n11 AS mbrc , t2.n1 AS maxthr, t2.n2 AS slavethr
from  DBA.SYSTEME_STATS T1 
	inner join  DBA.SYSTEME_STATS T2 on t1.statid=t2.statid
where t1.c4='CPU_SERIO'
and t2.c4='PARIO'
and t1.c1 ='COMPLETED'
order by debut ;

IV. Détermination des valeurs optimales


V. Modifier et fixer la valeur des paramètres

Le package DBMS_STATS.SET_SYSTEM_STATS permet de spécifier les valeurs choisies.

exec DBMS_STATS.SET_SYSTEM_STATS('slavethr',36854);
exec DBMS_STATS.SET_SYSTEM_STATS('cpuspeednw',6);
exec DBMS_STATS.SET_SYSTEM_STATS('mbrc',30);
exec DBMS_STATS.SET_SYSTEM_STATS('sreadtim',3);
exec DBMS_STATS.SET_SYSTEM_STATS('mreadtim',6);
exec DBMS_STATS.SET_SYSTEM_STATS('ioseektim',11);
exec DBMS_STATS.SET_SYSTEM_STATS('iotfrspeed',4096);
exec DBMS_STATS.SET_SYSTEM_STATS('cpuspeed',865);
exec DBMS_STATS.SET_SYSTEM_STATS('maxthr',386631682);

VI. Conclusion et remerciements



               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2011 fadace. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique Oracle