viernes, 6 de marzo de 2015

Ejecución de Estadísticas en la base de datos Oracle.

Ejecución de Estadísticas en la base de datos Oracle.

A continuación se indica el proceso de ejecución de las estadísticas en las tablas de la base de datos Oracle.
Consultando las tablas para un esquema y contando cuantas se tienen.
SELECT * from all_tables   where owner = 'CS'
SELECT Count(*) from all_tables   where owner = 'CS'

Consultando el último análisis realizado a una tabla y sus índices.
  SELECT table_name, table_name Object_name, num_rows, last_analyzed
  from user_tables
  where table_name = 'S_X'
  union
  select table_name,index_name Object_name, num_rows, last_analyzed
  from user_indexes
  where table_name = 'S_X'


Consultando el ultimo análisis a todas las tablas y los índices.
  SELECT table_name, table_name Object_name, num_rows, last_analyzed
  from user_tables
   union
  select table_name,index_name Object_name, num_rows, last_analyzed
  from user_indexes

Consultando el último análisis a las tablas de ciertos esquemas.

  SELECT owner, table_name, table_name Object_name, num_rows, last_analyzed
  from all_tables
  WHERE owner = 'CS'  OR
owner = 'ADM'  OR
owner = 'CS'  OR
owner = 'CKEP'  OR
owner = 'CB001'  OR
owner = 'CB008'  OR
owner = 'CBN001'  OR
owner = 'ORUS'  OR
owner = 'ORAUS'  OR
owner = 'USRN'
 ORDER BY  LAST_ANALYZED
Una ejemplo de consulta que genera el script de todas las tablas de un esquema, en que nos arroja el comando con el esquema y tabla a ejecutar su análisis.

Lo relevante en este caso es que al ejecutar la estadística por tabla, genera a la par el análisis de los índices que cuenta la tabla.

         select 'EXEC DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''', estimate_percent => 30);' from all_tables where owner = 'CS'
A continuación vemos la salida de los comandos ya armados con algunas tablas y su esquema respectivo.

EXEC DBMS_STATS.gather_table_stats('CS', 'SSO_LIBRE_B', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SDAS', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SSMOS', estimate_percent => 30);
EXEC DBMS_STATS.gather_table_stats('CS', 'SICTA', estimate_percent => 30);


EXEC DBMS_STATS.gather_table_stats('ORAUS', 'SCH', estimate_percent => 30);

Podemos ejecutar el select para formar el script de las tablas que contienen un número determinado de registros para poder evitar arrojar de golpe las estadísticas.

  select 'EXEC DBMS_STATS.gather_table_stats('''||OWNER ||''', '''||TABLE_NAME||''', estimate_percent => 30);' from all_tables where owner = 'CS'
         AND  NUM_ROWS  < 500000
Recordemos la recomendación por parte de la consultoría, no ejecutar el analyze, y realizarlo mediante estas funciones.
En la versión 11, se debe ejecutar con unos nuevos procedimientos:

GATHER_SCHEMA_STATS 

GATHER_TABLE_STATS 

GATHER_INDEX_STATS

NOTA IMPORTANTE:

1.       NO EJECUTAR por esquema, ni muchas tablas, puede afectar el rendimiento del servicio de bases de datos, debe hacerse en horas que no afecte los procesos en línea que continuamente se viven.

2.       Es mejor realizarlo paulatino por tabla, sobre todo cuidar las tablas de muchos registros.




No hay comentarios:

Publicar un comentario