2009-11-25 5 views
2

Quels sont les moyens de planifier automatiquement des "tables d'analyse". Est-il possible de demander une "analyse des tables" automatique quand beaucoup de données changent par insertion et suppression? Quels sont les moyens de paramétrer le processus d'analyse automatique des tables, c'est-à-dire de définir les règles quand elles doivent être déclenchées.Tables de réglage/analyse Oracle

Répondre

2

« Est-il possible d'avoir ce travail étant déclenché quand il y a une proportion importante de données a changé " En théorie, vous pouvez faire un déclencheur AFTER INSERT sur une table qui déclenche automatiquement DBMS_STATS.

Mais faites attention à ce que vous souhaitez. Si vous êtes au milieu d'un gros travail ETL, après avoir inséré un million de lignes dans la table, vous ne voulez pas forcément désactiver immédiatement un travail DBMS_STATS. De même, lorsque vous êtes à la période de traitement en ligne la plus occupée (par exemple, le déjeuner), vous ne voulez pas le ralentir en recueillant des statistiques en même temps.

Vous souhaitez généralement que ces statistiques collectent des tâches en période de faible utilisation (nuits, week-ends). Si vous avez un grand nombre de tâches qui se chargent dans beaucoup de tables, je construirais DBMS_STATS dans le lot. Savez-vous comment programmer le travail en effectuant cette analyse?

4

Quelle version d'Oracle utilisez-vous? À partir de 10.1, Oracle a livré un travail automatique qui recueille des statistiques tous les soirs sur tout objet qui a été modifié substantiellement (basé sur un algorithme interne sujet à changement, mais je crois que le seuil est ~ 15%). recueillies. En supposant que vous utilisez une version actuellement prise en charge, les statistiques sont automatiquement collectées par défaut, à moins que vous ne désactiviez explicitement ce travail.

Vous pouvez utiliser le package DBMS_STATS pour recueillir des statistiques sur un objet basé sur un événement et vous pouvez utiliser le package DBMS_JOB (ou DBMS_SCHEDULER) d'avoir ce fait de manière asynchrone. Ainsi, à la fin d'un processus ETL, vous pouvez recueillir des statistiques

BEGIN 
    dbms_stats.gather_table_stats( 
    ownname => <<schema name>>, 
    tabname => <<table name>> 
); 
END; 

Vous pouvez avoir cette exécuter de manière asynchrone

DECLARE 
    l_jobno INTEGER; 
BEGIN 
    dbms_job.submit(
    l_jobno, 
    'BEGIN dbms_stats.gather_table_stats(''<<schema name>>'', ''<<table name>>''); END;', 
    sysdate + interval '1' minute 
); 
END; 
+0

Existe-t-il un moyen de déclencher ce travail lorsqu'il y a une proportion substantielle de données modifiées, c'est-à-dire non basées sur un calendrier mais basées sur des événements? – paweloque

+0

J'ai mis à jour la réponse pour inclure un exemple simple de planification d'un travail pour analyser une table. –

Questions connexes