sql >> Base de Datos >  >> RDS >> Oracle

Recopile estadísticas de esquema mediante FND_STATS en EBS 11i y R12

Cómo recopilar estadísticas en EBS

  • Para utilizar el Optimizador basado en costos de manera eficaz, las estadísticas del esquema deben estar actualizadas. Afortunadamente, Oracle EBS ha proporcionado algunos scripts y programas concurrentes (recopilar estadísticas de esquema y recopilar estadísticas de tabla) para facilitar esta tarea administrativa. FND_STATS es un paquete PL/SQL para las Aplicaciones que tiene numerosas funciones que ayudarán en esta tarea administrativa. Este paquete se puede invocar desde un programa concurrente inicializado o directamente desde SQL*Plus.
  • No se recomienda utilizar DBMS_STATS con la base de datos de aplicaciones de Oracle.
  • Al usar el programa simultáneo "Recopilar estadísticas de esquema", se recomienda que solo pase el parámetro de nombre de esquema y deje que los demás parámetros tengan sus valores predeterminados. El nombre del esquema pasado puede ser un nombre de esquema específico (por ejemplo, GL) o "TODOS" si prefiere recopilar estadísticas de CBO para los módulos de aplicaciones. Esta opción utiliza el método de "estimación" con un tamaño de muestra del 10 % (predeterminado).
  • Cuando utilice el programa simultáneo "Recopilar estadísticas de la tabla", solo transmita el propietario de la tabla (nombre del esquema) y el nombre de la tabla. Deje que todos los demás parámetros se establezcan automáticamente, excepto cuando la tabla sea una tabla particionada.

Para ejecutar manualmente FND_STATS desde SQL*Plus para recopilar estadísticas de CBO para uno o todos los esquemas, o para una tabla en particular, use la siguiente sintaxis:

Para recopilar estadísticas para un esquema particular

exec fnd_stats.gather_schema_statistics('AP');

Para recopilar estadísticas de TODOS  el esquema en la base de datos

exec fnd_stats.gather_schema_statistics('ALL');

Para recopilar estadísticas para una tabla en particular 

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

Más comandos 

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

Para recopilar estadísticas al 10 %

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

Para recopilar estadísticas al 30 %

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

Para recopilar estadísticas al 25% con 4 trabajadores paralelos

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

Para recopilar estadísticas con auto_sample_size

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

Comandos similares

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 la base de datos 11g y 12c, se recomienda comenzar a utilizar GATHER AUTO y AUTO SAMPLE SIZE para recopilar estadísticas

Esto se puede hacer a través de una solicitud concurrente también o a través de sql

Reunir para el esquema APPLSYS:

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

Reunir para TODOS los esquemas:(puede o no querer hacer esto)

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

Esto funciona bastante más rápido que otros anteriores y también es muy preciso. Es más rápido ya que genera estadísticas solo para objetos obsoletos y también con tamaño de muestra automático

Si desea saber el tiempo que tomaron las estadísticas de recopilación en el esquema, podemos usar la siguiente consulta

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 ;

Recopilación de estadísticas del sistema con 11i y R12

Para E-Business Suite, para bases de datos que no sean Exadata, se recomienda recopilar estadísticas del sistema con la opción NOWORKLOAD, como en:

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

Pero para la base de datos Exadata use el siguiente comando en su lugar:

execute DBMS_STATS.GATHER_SYSTEM_STATS ('EXADATA');

Por lo general, esto solo debe hacerse una vez después de realizar cambios importantes en la arquitectura de la base de datos.

Recopilación de estadísticas de diccionario con 11i y R12

  • Debe tener el privilegio del sistema SYSDBA (o ANALYZE ANY DICTIONARY y ANALYZE ANY) para ejecutar este procedimiento.
execute dbms_stats.gather_schema_stats(''SYS'', method_opt=>''for all columns size 1'', degree=>30,estimate_percent=>100,cascade=>true);
  • Si está utilizando la versión de base de datos 10g/11g, puede usar la siguiente sintaxis en su lugar
execute dbms_stats.gather_dictionary_stats ();
  • Este procedimiento recopilará estadísticas para todos los esquemas del sistema, incluidos SYS y SYSTEM, y otros esquemas opcionales, como CTXSYS y DRSYS.
  • Normalmente, esto solo debe hacerse una vez después de realizar cambios importantes en la arquitectura de la base de datos.

Esto concluye los pasos para recopilar estadísticas del optimizador en el entorno Oracle EBS. Espero que les guste la publicación sobre Recopilar estadísticas de esquema mediante FND_STATS en EBS 11i y R12

También lee
Oracle concurrent Manager
Sugerencias de optimización
https://docs.oracle.com/cd/E18727_01/doc.121/e12893/T174296T174306.htm