Oracle
 sql >> база данни >  >> RDS >> Oracle

Съберете статистически данни за схемата с помощта на FND_STATS в EBS 11i и R12

Как да събирам статистически данни в EBS

  • За да използвате ефективно базиран на разходите оптимизатор, статистическите данни на схемата трябва да са актуални. За щастие Oracle EBS предостави някои скриптове и едновременни програми (Gather Schema Statistics и Gather Table statistics), за да улесни тази административна задача. FND_STATS е PL/SQL пакет за приложенията, който има множество функции, които ще помогнат при тази административна задача. Този пакет може да бъде извикан или от заложена едновременна програма, или директно от SQL*Plus.
  • Не се препоръчва използването на DBMS_STATS с Oracle apps Database.
  • Когато използвате паралелната програма „Gather Schema Statistics“, препоръчително е да предавате само параметъра за име на схемата и да оставите другите параметри да задават по подразбиране стойности по подразбиране. Преданото име на схемата може да бъде конкретно име на схема (напр. GL) или „ВСИЧКИ“, ако предпочитате да събирате статистически данни за CBO за модули на приложения. Този избор използва метода „оценка“ с размер на извадката от 10% (по подразбиране).
  • Когато използвате паралелната програма „Gather Table Statistics“, предавайте само собственика на таблицата (име на схемата) и името на таблицата. Нека всички други параметри да се задават автоматично по подразбиране, освен когато таблицата е разделена таблица.

За да изпълните ръчно FND_STATS от SQL*Plus за събиране на CBO статистика за една или всички схеми, или за конкретна таблица, използвайте следния синтаксис:

За събиране на статистически данни за конкретна схема

exec fnd_stats.gather_schema_statistics('AP');

За събиране на статистически данни за ВСИЧКИ  схеми в базата данни

exec fnd_stats.gather_schema_statistics('ALL');

За събиране на статистически данни  за конкретна таблица 

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

Още една команда 

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

За събиране на статистика на 10%

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

За събиране на статистика на 30%

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

За събиране на статистически данни при 25% с 4 паралелни работници

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

За събиране на статистически данни с auto_sample_size

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

Подобни команди

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

С база данни 11g и 12c се препоръчва да започнете да използвате GATHER AUTO и AUTO SAMPLE SIZE за събиране на статистически данни

Това може да стане и чрез едновременна заявка или чрез sql

Съберете за схемата APPLSYS:

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

Съберете за ВСИЧКИ схеми:(може или не може да искате да направите това)

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

Това работи доста по-бързо до други по-горе и също е много точно. Той е по-бърз, тъй като генерира статистически данни само за остарели обекти и това също с автоматичен размер на извадката

Ако искате да знаете статистическите данни за времето за събиране на схемата, можем да използваме заявката по-долу

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 ;

Събиране на системна статистика с 11i и R12

За E-Business Suite, за бази данни, които не са Exadata, се препоръчва да събирате системна статистика с опция NOWORKLOAD, както е в:

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

Но за база данни Exadata използвайте следната команда вместо това:

execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

Обикновено това трябва да се направи само веднъж след големи архитектурни промени, направени в DB.

Събиране на статистически данни от речника  с 11i и R12

  • Трябва да имате системните привилегии SYSDBA (или и двете АНАЛИЗИРАТЕ ВСЯКАКЪВ РЕЧНИК и АНАЛИЗИРАТЕ ВСЕКИ), за да изпълните тази процедура.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Ако използвате версия на база данни 10g/11g, вместо това можете да използвате следния синтаксис
execute dbms_stats.gather_dictionary_stats ();
  • Тази процедура ще събира статистически данни за всички системни схеми, включително SYS и SYSTEM, и други незадължителни схеми, като CTXSYS и DRSYS.
  • Обикновено това трябва да се направи само веднъж след големи архитектурни промени, направени в DB.

Това приключва стъпките за събиране на статистически данни за оптимизатор в Oracle EBS среда. Надяваме се да ви хареса публикацията за събиране на статистика на схемата с помощта на FND_STATS в EBS 11i и R12

Също чете
Oracle Concurrent Manager
Съвети за оптимизатор
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Последователност на Oracle, започваща с 2 вместо с 1

  2. Пренаредете колоните на таблицата в Oracle

  3. Как да премахнете множество интервални дялове въз основа на дата?

  4. Вземете плик, т.е. припокриващи се времеви интервали

  5. Изхвърляне на блокове от данни