Şema istatistiklerinin toplu halde toplanması

Veritabanlarında bazı durumlarda otomatik bakım job’ları kapatılmaktadır. Bu durumda şema istatistikleri toplanmamakta ve ciddi performans sorunlarına sebep olmaktadır.

Bir job aracılığı ile şemaların ayrı ayrı istatistiklerinin toplanması mümkündür. Bu iş için aşağıdaki job’ı kullanabilirsiniz.

Şema istatistiklerini toplamak için gerekli job :

Job içerisindeki USER1,USER2,USER3 şema isimlerini kendi veritabanınızdaki şema isimleri ile değiştirip veya daha fazla şema gerekli ise ilgili bloğu çoğaltarak çalıştırabilirsiniz. Job her cumartesi 03:30 da başlayacaktır.  SYS şeması altında oluşturmanız faydalı olacaktır. degree parametresini arttırarak daha kısa sürede bitmesini sağlayabilirsiniz.

BEGIN
  SYS.DBMS_SCHEDULER.CREATE_JOB
    (
       job_name        => 'SYS.GATHER_SCHEMA_STATS_JOB'
      ,start_date      => TO_TIMESTAMP_TZ('2016/11/12 00:00:00.000000 Europe/Istanbul','yyyy/mm/dd hh24:mi:ss.ff tzr')
      ,repeat_interval => 'FREQ=WEEKLY;BYDAY=SAT;BYHOUR=3;BYMINUTE=30'      
      ,end_date        => NULL
      ,job_class       => 'DEFAULT_JOB_CLASS'
      ,job_type        => 'PLSQL_BLOCK'
      ,job_action      => 'begin


dbms_stats.gather_schema_stats( 
ownname=> ''"USER1"'' ,  
cascade=> DBMS_STATS.AUTO_CASCADE, 
estimate_percent=> null, 
degree=> 1,  
no_invalidate=> DBMS_STATS.AUTO_INVALIDATE, 
granularity=> ''AUTO'', 
method_opt=> ''FOR ALL COLUMNS SIZE AUTO'', 
options=> ''GATHER'');

dbms_stats.gather_schema_stats( 
ownname=> ''"USER2"'' ,  
cascade=> DBMS_STATS.AUTO_CASCADE, 
estimate_percent=> null, 
degree=> 1,  
no_invalidate=> DBMS_STATS.AUTO_INVALIDATE, 
granularity=> ''AUTO'', 
method_opt=> ''FOR ALL COLUMNS SIZE AUTO'', 
options=> ''GATHER'');

dbms_stats.gather_schema_stats( 
ownname=> ''"USER3"'' ,  
cascade=> DBMS_STATS.AUTO_CASCADE, 
estimate_percent=> null, 
degree=> 1,  
no_invalidate=> DBMS_STATS.AUTO_INVALIDATE, 
granularity=> ''AUTO'', 
method_opt=> ''FOR ALL COLUMNS SIZE AUTO'', 
options=> ''GATHER'');


end;'
      ,comments        => NULL
    );
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'RESTARTABLE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'LOGGING_LEVEL'
     ,value     => SYS.DBMS_SCHEDULER.LOGGING_RUNS);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'MAX_FAILURES');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'MAX_RUNS');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'STOP_ON_WINDOW_CLOSE'
     ,value     => FALSE);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'JOB_PRIORITY'
     ,value     => 3);
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'SCHEDULE_LIMIT');
  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
    ( name      => 'SYS.GATHER_SCHEMA_STATS_JOB'
     ,attribute => 'AUTO_DROP'
     ,value     => FALSE);

  SYS.DBMS_SCHEDULER.ENABLE
    (name                  => 'SYS.GATHER_SCHEMA_STATS_JOB');
END;
/

 

 

Loading

Leave Your Comment