[ 2018-02-27 ]

Ejecutando manualmente una "Optimizer Statistics Auto Task"


Bajo ciertas circunstancias puede ser necesario lanzar manualmente el job de recopilación automática de estadísticas del optimizador.  Esto es habitual en casos donde se está evaluando la performance de algún SQL o luego de depuraciones grandes de datos.
A partir de la versión 11g,  el mecanismo de ejecución de “Auto-Tasks” para tareas de mantenimiento, reemplazó la necesidad de gather_stats_job.
También  existe la posibilidad de forzar la ejecución manual (fuera de la ventana de mantenimiento) utilizando la siguiente sentencia:

SQL> exec DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS

Para utilizar este comando es necesario el privilegio de DBA.

Esto le indica al subsistema "Automated Maintenance Tasks" iniciar un job para recolectar estadísticas, siempre y cuando no exista ya un job en ejecución.
Este caso puede darse si una ventana de mantenimiento está abierta en ese momento. Si el job es finalmente lanzado sin problemas, tendrá un nombre con el formato: ORA $ _AT_OS_MANUAL_nnnnnn (nnnnn son uno o más dígitos decimales).
Como comentaba, a diferencia de los jobs de mantenimiento automatizados normales , el job "MANUAL" no está directamente vinculado a una ventana de mantenimiento específica.

 Para controlar el avance de la ejecución de la tarea, podemos usar el siguiente comando:

SQL> select job_name,state
           from dba_scheduler_jobs
           where program_name='GATHER_STATS_PROG';

Y en el caso se ser necesario cancelarla:

SQL> variable jobid varchar2(32)
SQL> exec select job_name into :jobid from dba_scheduler_jobs where program_name='GATHER_STATS_PROG';
SQL> print :jobid
SQL> exec dbms_scheduler.stop_job(:jobid,false)


No hay comentarios:

Publicar un comentario