Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Reunir estatísticas de esquema usando FND_STATS no EBS 11i e R12

Como coletar estatísticas no EBS

  • Para usar o Cost Based Optimizer com eficiência, as estatísticas do esquema devem estar atualizadas. Felizmente, o Oracle EBS forneceu alguns scripts e programas simultâneos (Gather Schema Statistics e Gather Table statistics) para facilitar essa tarefa administrativa. FND_STATS é um pacote PL/SQL para as Aplicações que possui inúmeras funções que auxiliarão nesta tarefa administrativa. Este pacote pode ser invocado a partir de um programa concorrente semeado ou diretamente do SQL*Plus.
  • Não é recomendado usar DBMS_STATS com o banco de dados de aplicativos Oracle.
  • Ao usar o programa simultâneo 'Gather Schema Statistics', é recomendável que você passe apenas o parâmetro do nome do esquema e deixe os outros parâmetros padrão com seus valores padrão. O nome do esquema passado pode ser um nome de esquema específico (por exemplo, GL) ou 'ALL' se você preferir coletar estatísticas de CBO para módulos de aplicativos. Essa escolha usa o método "estimativa" com um tamanho de amostra de 10% (padrão).
  • Ao usar o programa simultâneo ‘Gather Table Statistics’, passe apenas o proprietário da tabela (nome do esquema) e o nome da tabela. Deixe todos os outros parâmetros serem padronizados automaticamente, exceto quando a tabela for particionada.

Para executar manualmente FND_STATS do SQL*Plus para coletar estatísticas de CBO para um ou todos os esquemas ou para uma tabela específica, use a seguinte sintaxe:

Para coletar estatísticas de um esquema específico
exec fnd_stats.gather_schema_statistics('AP');

Para coletar estatísticas de TODOS  esquemas no banco de dados
exec fnd_stats.gather_schema_statistics('ALL');

Para coletar estatísticas  para uma tabela específica 
exec fnd_stats.gather_table_stats('GL','GL_JE_LINES');

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

Para reunir estatísticas em 10%
exec apps.fnd_stats.GATHER_TABLE_STATS('QP','QP_LIST_HEADERS_TL',10);

Para reunir estatísticas em 30%
exec apps.fnd_stats.GATHER_TABLE_STATS('CSM','CSM_MTL_SYSTEM_ITEMS_ACC',35);

Para reunir estatísticas em 25% com 4 trabalhadores paralelos
exec apps.fnd_stats.GATHER_TABLE_STATS('ONT','OE_TRANSACTION_TYPES_ALL',25,4);

Para coletar estatísticas com auto_sample_size
exec apps.fnd_stats.GATHER_TABLE_STATS('HR','PAY_RUN_BALANCES',dbms_stats.auto_sample_size);

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

Com o banco de dados 11g e 12c, é recomendável começar a usar GATHER AUTO e AUTO SAMPLE SIZE para coletar estatísticas

Isso pode ser feito através de solicitação simultânea também ou através do sql

Reúna para o esquema APPLSYS:
exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'APPLSYS',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');

Reúna para TODOS os esquemas:(pode ou não querer fazer isso)
exec apps.fnd_stats.gather_schema_statistics(schemaname=> 'ALL',estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE ,options => 'GATHER AUTO');

Isso é muito mais rápido para os outros acima e também é muito preciso. É mais rápido, pois gera estatísticas apenas para objetos obsoletos e também com tamanho de amostra automático

Se você quiser saber as estatísticas de coleta de tempo no esquema, podemos usar a consulta abaixo
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 ;

Reunindo estatísticas do sistema com 11i e R12


Para o E-Business Suite, para bancos de dados não Exadata, é recomendável coletar estatísticas do sistema com a opção NOWORKLOAD, como em:
execute DBMS_STATS.GATHER_SYSTEM_STATS (gathering_mode => 'NOWORKLOAD');

Mas para o banco de dados Exadata, use o seguinte comando:
execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

Normalmente, isso só precisa ser feito uma vez após as principais alterações de arquitetura feitas no banco de dados.

Reunindo estatísticas de dicionário com 11i e R12

  • Você deve ter o privilégio de sistema SYSDBA (ou ambos ANALYZE ANY DICTIONARY e ANALYZE ANY) para executar este procedimento.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Se você estiver usando o banco de dados versão 10g/11g, poderá usar a seguinte sintaxe
execute dbms_stats.gather_dictionary_stats ();
  • Este procedimento reunirá estatísticas para todos os esquemas do sistema, incluindo SYS e SYSTEM, e outros esquemas opcionais, como CTXSYS e DRSYS.
  • Normalmente, isso só precisa ser feito uma vez após as principais alterações de arquitetura feitas no banco de dados.

Isso conclui as etapas para Coletar estatísticas do otimizador no ambiente Oracle EBS. Espero que gostem do post sobre Gather Schema Statistics Using FND_STATS in EBS 11i e R12

Também lê
Oracle concurrent Manager
Dicas do otimizador
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm