sql >> Database >  >> RDS >> Oracle

Verzamel schemastatistieken met FND_STATS in EBS 11i en R12

Statistieken verzamelen in EBS

  • Om Cost Based Optimizer effectief te kunnen gebruiken, moeten de schemastatistieken actueel zijn. Gelukkig heeft Oracle EBS enkele scripts en gelijktijdige programma's (Verzamel Schemastatistieken en Verzamel Tabelstatistieken) geleverd om deze administratieve taak gemakkelijker te maken. FND_STATS is een PL/SQL-pakket voor de applicaties met tal van functies die helpen bij deze administratieve taak. Dit pakket kan worden aangeroepen vanuit een geplaatst gelijktijdig programma of rechtstreeks vanuit SQL*Plus.
  • Het wordt niet aanbevolen om DBMS_STATS te gebruiken met Oracle apps Database.
  • Als u het gelijktijdige programma 'Verzamel schemastatistieken' gebruikt, wordt aanbevolen dat u alleen de parameter voor de schemanaam doorgeeft en de andere parameters de standaardwaarden laat gebruiken. De doorgegeven schemanaam kan een specifieke schemanaam zijn (bijv. GL) of 'ALL' als u liever CBO-statistieken voor Apps-modules verzamelt. Deze keuze maakt gebruik van de "schatting"-methode met een steekproefomvang van 10% (standaard).
  • Als u het gelijktijdige programma 'Verzamel tabelstatistieken' gebruikt, geeft u alleen de eigenaar van de tabel (schemanaam) en de tabelnaam door. Laat alle andere parameters automatisch standaard worden, behalve wanneer de tabel een gepartitioneerde tabel is.

Gebruik de volgende syntaxis om FND_STATS handmatig uit te voeren vanuit SQL*Plus om CBO-statistieken voor een of alle schema's of voor een bepaalde tabel te verzamelen:

Statistieken verzamelen voor een bepaald schema

exec fnd_stats.gather_schema_statistics('AP');

Statistieken verzamelen voor ALLE schema's in de database

exec fnd_stats.gather_schema_statistics('ALL');

Statistieken verzamelen  voor een bepaalde tabel 

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

Nog wat meer commando 

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

Statistieken verzamelen van 10%

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

Statistieken verzamelen op 30%

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

Statistieken verzamelen van 25% met 4 parallelle werkers

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

Statistieken verzamelen met auto_sample_size

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

Vergelijkbare opdrachten

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

Met 11g- en 12c-database wordt aanbevolen om GATHER AUTO en AUTO SAMPLE SIZE te gaan gebruiken voor het verzamelen van statistieken

Dit kan ook via een gelijktijdig verzoek of via de sql

Verzamel voor het APPLSYS-schema:

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

Verzamel voor ALLE schema's:(wil dit wel of niet doen)

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

Dit gaat vrij sneller naar andere bovenstaande en het is ook zeer nauwkeurig. Het is sneller omdat het alleen statistieken genereert voor oude objecten en dat ook met automatische steekproefgrootte

Als je wilt weten welke statistieken voor het verzamelen van timing de schema's hebben overgenomen, kunnen we onderstaande query gebruiken

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 ;

Systeemstatistieken verzamelen met 11i en R12

Voor E-Business Suite, voor niet-Exadata-databases, wordt aanbevolen om systeemstatistieken te verzamelen met de optie NOWORKLOAD, zoals in:

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

Maar voor Exadata-database gebruik in plaats daarvan het volgende commando:

execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

Meestal hoeft dit maar één keer te worden gedaan na grote architecturale wijzigingen die in de DB zijn aangebracht.

Woordenboekstatistieken verzamelen met 11i en R12

  • U moet de systeemrechten SYSDBA (of beide ANALYSE ELK WOORDENBOEK en ANALYSE ELK) systeemprivilege hebben om deze procedure uit te voeren.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Als u databaseversie 10g/11g gebruikt, kunt u in plaats daarvan de volgende syntaxis gebruiken
execute dbms_stats.gather_dictionary_stats ();
uit
  • Deze procedure verzamelt statistieken voor alle systeemschema's, inclusief SYS en SYSTEM, en andere optionele schema's, zoals CTXSYS en DRSYS.
  • Normaal gesproken hoeft dit maar één keer te worden gedaan na grote architecturale wijzigingen die in de DB zijn aangebracht.

Hiermee zijn de stappen voor het verzamelen van optimalisatiestatistieken in de Oracle EBS-omgeving afgerond. Ik hoop dat je het leuk vindt om een ​​bericht te plaatsen op Verzamel schemastatistieken met behulp van FND_STATS in EBS 11i en R12

Leest ook
Oracle gelijktijdige Manager
Optimizer-tips
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm


  1. Hoe u alle schendingen van beperkingen in een SQL Server-database kunt vinden

  2. Index voor het vinden van een element in een JSON-array

  3. Tabel afkappen in MySQL

  4. Overschakelen van Django-project van sqlite3-backend naar postgresql mislukt bij het laden van datadump