IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Automatiser un ANALYZE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut Automatiser un ANALYZE
    Bonjour

    Voici mon problème. Sur un serveur Oracle 10G, nous avons installé un schéma d'un fournisseur.
    Le fournisseur recommande d'exécuter un ANALYZE sur une table qui recence plus d'un million d'entrée.
    C'est vrai, exécuter un ANALYZE TABLE truc COMPUTE STATISTICS aide pas mal.
    Mais je voudrais automatiser cette tâche.
    Est-ce possible? J'ai essayé mais mettre ceci dans un bloc PL/SQL n'est pas accepté.
    Par ailleurs, est-il utile d'invoquer DBMS_STATS ?

    Merci d'avance de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  2. #2
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    En quelle version d'oracle êtes-vous ?
    Avez-vous désactivé le calcul automatique des statistiques ?

    En 11g (et 10g), Oracle recalcule automatiquement les statistiques si la table a plus de n% (10% par défaut je crois) de changement.

    Voici quelques docs utiles :
    http://docs.oracle.com/cd/E11882_01/...t.htm#PFGRF027
    http://docs.oracle.com/cd/E11882_01/...htm#REFRN10214
    http://docs.oracle.com/cd/E11882_01/...s.htm#ARPLS059

    Cordialement,

    Arkhena

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Soit votre fournisseur a dit ANALYZE par réflexe de langage, mais veut juste dire "recalculer les statistiques", ce qui se fait depuis plusieurs versions par DBMS_STATS, soit il a quelques métros de retard...

    Comme l'indique Arkena, depuis Oracle 10g, les statistiques sont par défaut rafraîchies chaque nuit, à moins que vous ayez désactivé ce mécanisme.

  4. #4
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Bonjour

    Merci pour vos réponses.
    Je suis sous Oracle 10g.
    En réalité, avec le fournisseur, on avait essayé d'invoquer le paquet DBMS_STATS mais au final, on y gagnait pas en performances en faisant:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbms_stats.gather_table_stats('MON_SCHEMA', 'TRUC', cascade=>TRUE);
    D'où ce retour vers ANALYZE.
    Bon, maintenant 2 choses:
    1) J'ai fait un 'script' Java qui permet d'automatiser les ANALYZE
    2) J'avoue que le serveur est localisé ailleurs (Belgique) et le DBA est en Angleterre, y a t'il une commande pour savoir si les stats sont calculées automatiquement ?

    Merci encore de vos réponses.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  5. #5
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    De mémoire il est fortement déconseillé de mélanger analyze et dbms_stats sur une même base de données, le CBO se planterais alors royalement dans ses analyses produisant des plans "surprise".

    Le mieux à faire est de voire quelles requêtes foirent (à l'aide d'AWR ou de statspack) puis de comprendre pourquoi elles foirent (là SQLT est votre ami)

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par GLDavid Voir le message
    En réalité, avec le fournisseur, on avait essayé d'invoquer le paquet DBMS_STATS mais au final, on y gagnait pas en performances en faisant:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC dbms_stats.gather_table_stats('MON_SCHEMA', 'TRUC', cascade=>TRUE);
    Rajoutez quelques options, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    begin
        dbms_stats.gather_table_stats
        ( ownname          => 'MON_SCHEMA'
        , tabname          => 'MA_TABLE'
        , cascade          => TRUE
        , estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE
        , degree           => 4
        );
    end;
    /
    À adapter selon votre besoin bien entendu :
    http://docs.oracle.com/cd/B19306_01/...s.htm#i1036461

  7. #7
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Citation Envoyé par GLDavid Voir le message
    y a t'il une commande pour savoir si les stats sont calculées automatiquement ?
    Bonjour,

    Les statistiques automatiques sont gérées par le scheduler. La requête suivante devrait vous donner les infos sur le job des statistiques par défaut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM dba_autotask_client
    WHERE client_name='auto optimizer stats collection';
    Cette requête-ci devrait vous donner des infos sur la (ou les) fenêtre d'exécution de ce job :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT window_group_name, window_name
    FROM dba_scheduler_wingroup_members
    WHERE window_group_name IN (SELECT window_group
    FROM dba_autotask_client
    WHERE client_name='auto optimizer stats collection');
    Cette dernière requête vous permet de trouver à quels jour et heure ces fenêtres d'exécution correspondent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT window_name, repeat_interval, duration
    FROM dba_scheduler_windows 
    WHERE window_name IN (SELECT window_name
    FROM dba_scheduler_wingroup_members
    WHERE window_group_name IN (SELECT window_group
    FROM dba_autotask_client
    WHERE client_name='auto optimizer stats collection'));
    J'allais oublier la doc afférente aux vues dba utilisées :
    dba_autotask_client : http://docs.oracle.com/cd/E11882_01/...htm#REFRN23591
    dba_scheduler_wingroup_members : http://docs.oracle.com/cd/E11882_01/...htm#REFRN23370
    dba_scheduler_windows : http://docs.oracle.com/cd/E11882_01/...htm#REFRN23352

    Cordialement,

    Arkhena

  8. #8
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par Arkhena Voir le message
    ...
    Attention, tout ce que vous venez de dire s'applique à partir d'Oracle 11.1.
    Or notre ami est en V10...

  9. #9
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par GLDavid Voir le message
    ...
    Bon, maintenant 2 choses:
    ...
    2) J'avoue que le serveur est localisé ailleurs (Belgique) et le DBA est en Angleterre, y a t'il une commande pour savoir si les stats sont calculées automatiquement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
      from dba_scheduler_jobs
     Where job_name = 'GATHER_STATS_JOB'
    Faitez pas de (mauvaises) scripts Java pour ce que Oracle sait mieux faire.

    Ne faite pas confiance à des éditeurs qui recomande d'utiliser Analyze pour améliorer les performances pour une base 10g.

  10. #10
    Membre expérimenté
    Avatar de GLDavid
    Homme Profil pro
    Head of Service Delivery
    Inscrit en
    Janvier 2003
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Head of Service Delivery
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 895
    Par défaut
    Bonjour à tous

    Avant tout, un grand merci pour vos réponses complètes.
    Je vais mettre en stand-by mon programme Java.
    J'ai réimplémenté un job à l'aide du code de Waldar.
    On verra bien demain matin si ça tourne mieux. Croisons les doigts !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code :tagcode: ni le tag :resolu:

    Je ne répond à aucune question technique par MP.

  11. #11
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par GLDavid Voir le message
    ...y a t'il une commande pour savoir si les stats sont calculées automatiquement ?
    Vous pouvez regarder de quand datent les dernières statistiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set linesize 100 pagesize 100
    select owner, table_name, to_char(last_analyzed, 'DD/MM/YYYY HH24:MI:SS') AS date_stats
    from dba_tables
    where owner='&SCHEMA'
    order by 1, 2;
    Si tout va bien, vous devriez avoir une date récente pour chaque table ayant une proportion significative (plus de 10 %) de lignes modifiées depuis le dernier calcul des statistiques.
    Ça vous indiquera si les statistiques sont à jour, mais pas qui les a calculées.

    Pour vérifier si le mécanisme automatique est activé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select job_name, enabled AS actif 
    from dba_scheduler_jobs
    where job_name='GATHER_STATS_JOB';
     
     
    JOB_NAME                       ACTIF
    ------------------------------ -----
    GATHER_STATS_JOB               TRUE

Discussions similaires

  1. automatiser un package
    Par farnoune dans le forum Oracle
    Réponses: 4
    Dernier message: 09/08/2004, 15h45
  2. Réponses: 2
    Dernier message: 01/06/2004, 16h12
  3. Automatisation et/ou installer pour une bd sql
    Par ZePitou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/02/2004, 12h54
  4. [MAPI][info] automatisation des taches de messagerie
    Par peppena dans le forum Windows
    Réponses: 6
    Dernier message: 22/01/2004, 16h06
  5. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo