Oracle
 sql >> Database >  >> RDS >> Oracle

Raccogli le statistiche dello schema utilizzando FND_STATS in EBS 11i e R12

Come raccogliere statistiche in EBS

  • Per utilizzare l'ottimizzatore basato sui costi in modo efficace, le statistiche dello schema devono essere aggiornate. Fortunatamente, Oracle EBS ha fornito alcuni script e programmi simultanei (Gather Schema Statistics e Gather Table Statistics) per semplificare questa attività amministrativa. FND_STATS è un pacchetto PL/SQL per le applicazioni che dispone di numerose funzioni che aiuteranno in questo compito amministrativo. Questo pacchetto può essere invocato da un programma simultaneo seminato o direttamente da SQL*Plus.
  • Non è consigliabile utilizzare DBMS_STATS con il database delle app Oracle.
  • Quando si utilizza il programma simultaneo "Gather Schema Statistics", si consiglia di passare solo il parametro del nome dello schema e di lasciare che gli altri parametri tornino ai valori predefiniti. Il nome dello schema passato può essere un nome schema specifico (ad es. GL) o "ALL" se preferisci raccogliere statistiche CBO per i moduli Apps. Questa scelta utilizza il metodo “stima” con una dimensione campionaria del 10% (predefinito).
  • Quando si utilizza il programma simultaneo "Gather Table Statistics", passare solo il proprietario della tabella (nome dello schema) e il nome della tabella. Lascia che tutti gli altri parametri siano predefiniti automaticamente, tranne quando la tabella è una tabella partizionata.

Per eseguire manualmente FND_STATS da SQL*Plus per raccogliere statistiche CBO per uno o tutti gli schemi o per una tabella particolare, utilizza la seguente sintassi:

Per raccogliere statistiche per uno schema particolare

exec fnd_stats.gather_schema_statistics('AP');

Per raccogliere statistiche per TUTTI gli  schemi nel database

exec fnd_stats.gather_schema_statistics('ALL');

Per raccogliere statistiche  per una tabella particolare 

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

Altri comandi 

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

Per raccogliere statistiche al 10%

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

Per raccogliere statistiche al 30%

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

Per raccogliere statistiche al 25% con 4 lavoratori in parallelo

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

Per raccogliere statistiche con auto_sample_size

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

Comandi simili

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);

Con il database 11g e 12c, si consiglia di iniziare a utilizzare GATHER AUTO e AUTO SAMPLE SIZE per raccogliere le statistiche

Questo può essere fatto anche tramite richiesta simultanea o tramite sql

Raccogli per lo schema APPLSYS:

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

Raccogli per TUTTI gli schemi:(puoi o meno volerlo fare)

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

Questo funziona abbastanza più velocemente rispetto ad altri sopra ed è anche molto preciso. È più veloce in quanto genera statistiche solo per gli oggetti obsoleti e anche con la dimensione del campione automatico

Se vuoi conoscere i tempi di raccolta delle statistiche che hanno assunto lo schema, possiamo utilizzare la query di seguito

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 ;

Raccolta delle statistiche di sistema con 11i e R12

Per E-Business Suite, per database non Exadata, si consiglia di raccogliere le statistiche di sistema con l'opzione NOWORKLOAD, come in:

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

Ma per il database Exadata usa invece il seguente comando:

execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

In genere, questa operazione deve essere eseguita solo una volta dopo eventuali modifiche importanti all'architettura apportate al DB.

Raccolta delle statistiche del dizionario con 11i e R12

  • Devi avere il privilegio di sistema SYSDBA (o entrambi ANALYZE ANY DICTIONARY e ANALYZE ANY) per eseguire questa procedura.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Se stai utilizzando la versione del database 10g/11g, puoi invece utilizzare la seguente sintassi
execute dbms_stats.gather_dictionary_stats ();
  • Questa procedura raccoglierà statistiche per tutti gli schemi di sistema, inclusi SYS e SYSTEM, e altri schemi opzionali, come CTXSYS e DRSYS.
  • In genere, questa operazione deve essere eseguita solo una volta dopo eventuali modifiche importanti all'architettura apportate al DB.

Questo conclude i passaggi per la raccolta di statistiche dell'ottimizzatore nell'ambiente Oracle EBS. Spero ti piaccia il post su Gather Schema Statistics utilizzando FND_STATS in EBS 11i e R12

Legge anche
Oracle simultanea Manager
Suggerimenti per l'ottimizzazione
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm