Oracle
 sql >> Base de données >  >> RDS >> Oracle

Recueillir des statistiques de schéma à l'aide de FND_STATS dans EBS 11i et R12

Comment collecter des statistiques dans EBS

  • Afin d'utiliser Cost Based Optimizer efficacement, les statistiques du schéma doivent être à jour. Heureusement, Oracle EBS a fourni des scripts et des programmes concurrents (Gather Schema Statistics et Gather Table statistics) pour faciliter cette tâche administrative. FND_STATS est un package PL/SQL pour les applications qui possède de nombreuses fonctions qui vous aideront dans cette tâche administrative. Ce package peut être appelé soit à partir d'un programme simultané prédéfini, soit directement à partir de SQL*Plus.
  • Il n'est pas recommandé d'utiliser DBMS_STATS avec Oracle apps Database.
  • Lorsque vous utilisez le programme simultané "Gather Schema Statistics", il est recommandé de ne transmettre que le paramètre de nom de schéma et de laisser les autres paramètres prendre leurs valeurs par défaut. Le nom de schéma transmis peut être un nom de schéma spécifique (par exemple, GL) ou "ALL" si vous préférez collecter des statistiques CBO pour les modules Apps. Ce choix utilise la méthode "estimation" avec une taille d'échantillon de 10 % (par défaut).
  • Lorsque vous utilisez le programme simultané "Gather Table Statistics", transmettez uniquement le propriétaire de la table (nom du schéma) et le nom de la table. Laissez tous les autres paramètres par défaut automatiquement, sauf lorsque la table est une table partitionnée.

Pour exécuter manuellement FND_STATS à partir de SQL*Plus afin de collecter les statistiques CBO pour un ou tous les schémas, ou pour une table particulière, utilisez la syntaxe suivante :

Pour collecter des statistiques pour un schéma particulier

exec fnd_stats.gather_schema_statistics('AP');

Pour collecter des statistiques pour TOUS les schémas dans la base de données

exec fnd_stats.gather_schema_statistics('ALL');

Pour collecter des statistiques pour une table particulière 

exec fnd_stats.gather_table_stats('GL','GL_JE_LINES');

Une autre commande 

exec apps.fnd_stats.GATHER_TABLE_STATS('GL','GL_POSTING');

Pour recueillir des statistiques à 10 %

exec apps.fnd_stats.GATHER_TABLE_STATS('QP','QP_LIST_HEADERS_TL',10);

Pour recueillir des statistiques à 30 %

exec apps.fnd_stats.GATHER_TABLE_STATS('CSM','CSM_MTL_SYSTEM_ITEMS_ACC',35);

Pour recueillir des statistiques à 25 % avec 4 travailleurs parallèles

exec apps.fnd_stats.GATHER_TABLE_STATS('ONT','OE_TRANSACTION_TYPES_ALL',25,4);

Pour recueillir des statistiques avec auto_sample_size

exec apps.fnd_stats.GATHER_TABLE_STATS('HR','PAY_RUN_BALANCES',dbms_stats.auto_sample_size);

Commandes similaires

exec apps.fnd_stats.GATHER_TABLE_STATS('HR','PAY_PAYROLL_ACTIONS',10,4);
exec apps.fnd_stats.GATHER_TABLE_STATS('HR',HR_CODES',35);
exec apps.fnd_stats.GATHER_TABLE_STATS('CS','CS_INCIDENT_TYPE_TL');
exec apps.fnd_stats.GATHER_SCHEMA_STATS('GL',25);

Avec les bases de données 11g et 12c, il est recommandé de commencer à utiliser GATHER AUTO et AUTO SAMPLE SIZE pour collecter des statistiques

Cela peut également être fait via une demande simultanée ou via le sql

Rassembler pour le schéma APPLSYS :

exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'APPLSYS',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');

Rassembler pour TOUS les schémas :(peut vouloir ou non le faire)

exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'ALL',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');

Cela fonctionne assez plus rapidement que les autres ci-dessus et il est également très précis. Il est plus rapide car il génère des statistiques pour les objets obsolètes uniquement et cela aussi avec la taille d'échantillon automatique

Si vous voulez connaître les statistiques de collecte de temps prises sur le schéma, nous pouvons utiliser la requête ci-dessous

select owner, min(last_analyzed) , max(last_analyzed) ,( max(last_analyzed) - min(last_analyzed))*24 hours_took
from dba_tables
where last_analyzed is not null
and trunc (last_analyzed) = '&enter_date_DD-MON-YY' -- Example : '01-APR-19'
group by owner
order by hours_took ;

Collecte de statistiques système avec 11i et R12

Pour E-Business Suite, pour les bases de données non-Exadata, il est recommandé de collecter des statistiques système avec l'option NOWORKLOAD, comme dans :

execute DBMS_STATS.GATHER_SYSTEM_STATS (gathering_mode => 'NOWORKLOAD');

Mais pour la base de données Exadata, utilisez plutôt la commande suivante :

execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

En règle générale, cela n'est nécessaire qu'une seule fois après toute modification architecturale majeure apportée à la base de données.

Collecte de statistiques de dictionnaire avec 11i et R12

  • Vous devez disposer du privilège système SYSDBA (ou à la fois ANALYZE ANY DICTIONARY et ANALYZE ANY) pour exécuter cette procédure.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Si vous utilisez la version 10g/11g de la base de données, vous pouvez utiliser la syntaxe suivante à la place
execute dbms_stats.gather_dictionary_stats ();
  • Cette procédure rassemblera des statistiques pour tous les schémas système, y compris SYS et SYSTEM, et d'autres schémas facultatifs, tels que CTXSYS et DRSYS.
  • En règle générale, cette opération n'est nécessaire qu'une seule fois après toute modification architecturale majeure apportée à la base de données.

Ceci conclut les étapes de collecte des statistiques de l'optimiseur dans l'environnement Oracle EBS. J'espère que vous aimez l'article sur la collecte de statistiques de schéma à l'aide de FND_STATS dans EBS 11i et R12

Lit également
Oracle Concurrent Manager
Conseils d'optimisation
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm