mercoledì 11 settembre 2024

RDBMS ORACLE - Statistiche di uno schema DB

 Di seguito alcuni comandi per raccogliere le statistiche di uno schema oracle:

  • DBMS_UTILITY.ANALYZE_SCHEMA --> viene utilizzato per raccogliere statistiche per tutte le tabelle, i cluster e gli indici di uno schema.
Examples:

  • EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');

  • EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','ESTIMATE', estimate_rows => 1000);

  • EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','ESTIMATE', estimate_percent => 25);

  • EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','DELETE');

Note: È anche possibile analizzare l'intero database con il comando  DBMS_UTILITY.ANALYZE_DATABASE('COMPUTE'); 

oppure si può utilizzare DBMS_STATS.GATHER_TABLE_STATS

  • EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'CONTRACT', cascade =>true,estimate_percent => dbms_stats.auto_sample_size);

  • EXECUTE DBMS_STATS.GATHER_TABLE_STATS(ownname => 'CONTRACT', tabname => 'CONT_NAME', method_opt => 'FOR ALL COLUMNS', granularity => 'ALL', cascade => TRUE, degree => DBMS_STATS.DEFAULT_DEGREE);

il seguente script genererà l'elenco dei comandi per l'analisi di tutte le tabelle nello schema.

SELECT 'EXECUTE DBMS_STATS.GATHER_TABLE_STATS
 (ownname =>'||CHR(39)||'CONTRACT'||CHR(39)||', 
  tabname =>'||CHR(39)||TNAME||CHR(39)||', 
  method_opt => ''FOR ALL COLUMNS'', 
  granularity => ''ALL'', 
  cascade => TRUE, 
  degree => DBMS_STATS.DEFAULT_DEGREE);'
FROM TAB;

Terminando abbiamo la possibilità di utilizzare due metodi differenti per la raccolta delle statistiche. Per capire quale utilizzare si rimanda alla documentazione ORACLE:

  • DBMS_UTILITY.ANALYZE_SCHEMA
  • DBMS_STATS.GATHER_TABLE_STATS