mercoledì 25 marzo 2015

RDBMS ORACLE- Stale Statistics III

Come detto negli altri due post per eliminare le statistiche di tipo STALE occorre ricalcolarle.
Purtroppo non è detto che la tabella a livello globale risulti essere NO STALE una volta ricompilate le partizioni e/o le sottopartizioni, occorre quindi esplicitamente effettuare il calcolo delle statistiche della tabella.
A questo punto uno può dire ma le ho fatte prima le statistiche che faccio come i cani che ricorrono la propria coda?
No mentre prima le statistiche erano state fatte a livello di partizioni e sottopartizioni in questo caso devono essere eseguite a livello Globale.
Di seguito come individuarle e come eseguirle:

for t in (
          SELECT C.OWNER,C.TABLE_NAME
            FROM
                (SELECT A.OWNER,A.TABLE_NAME ,A.SAMPLE_SIZE
                   FROM DBA_TAB_STATISTICS A,DBA_TABLES B
                  WHERE A.OWNER=v_owner AND A.STALE_STATS='YES'
                    AND A.OWNER=B.OWNER AND A.TABLE_NAME=B.TABLE_NAME
                    AND B.PARTITIONED='YES' AND A.OBJECT_TYPE='TABLE') C,
                DBA_TAB_STATISTICS D
            WHERE  C.OWNER=D.OWNER AND C.TABLE_NAME=D.TABLE_NAME
            AND C.TABLE_NAME = <v_table_name> AND D.OBJECT_TYPE='PARTITION'
            GROUP BY C.OWNER,C.TABLE_NAME                
  )loop

            v_cmd:='BEGIN DBMS_STATS.GATHER_TABLE_STATS(
                                     OwnName => :v_owner,
                                     TabName => :x_table_name,
                                     Granularity => ''GLOBAL'',
                                     Degree => 2,
                                     Cascade => TRUE);
                      END;';
           dbms_output.put_line('TABLE_NAME:'||x.table_name);
           execute immediate v_cmd using in t.owner,t.table_name;               

   end loop;


In questo modo eseguiamo le statistiche su tutte le tabelle partizionate/sottopartizionate.

Nessun commento:

Posta un commento