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