15
Comando Analyze ORACLE Prof. Ing. Erick López Ch. M.R.I.

Comando Analyze ORACLE

  • Upload
    bonita

  • View
    71

  • Download
    0

Embed Size (px)

DESCRIPTION

Comando Analyze ORACLE. Prof. Ing. Erick López Ch. M.R.I. ANALYZE. Consiste en recopilar y actualizar el CATALOGO de oracle con datos estadísticos . Oracle elige el plan de ejecución más adecuado a cada sentencia (EXPLAIN PLAN ). - PowerPoint PPT Presentation

Citation preview

Page 1: Comando  Analyze  ORACLE

Comando Analyze ORACLE

Prof. Ing. Erick López Ch. M.R.I.

Page 2: Comando  Analyze  ORACLE

ANALYZE Consiste en recopilar y actualizar el CATALOGO de

oracle con datos estadísticos. Oracle elige el plan de ejecución más adecuado a

cada sentencia (EXPLAIN PLAN). Estos datos no pueden actualizarse en tiempo real

porque penlizaría mucho el rendimiento general de la base de datos.

Se actualizan datos como el número de registros de una tabla, el tamaño de los objetos, etc.

Actualmente hay dos formas de actualiza las estadísticas de las tablas e indices, con el comando ANALYZE y con el paquete DBMS_UTILITY.

Page 3: Comando  Analyze  ORACLE

Comando ANALYZE Consiste en recopilar y actualizar

el CATALOGO de oracle con datos estadísticos La cláusula COMPUTE hace un cálculo exacto

de la estadísticas (tarda más en realizarse en ANALYZE)

La cláusula ESTIMATE hace una estimación partiendo del anterior valor calculado y de un posible factor de variación.

La cláusula DELETE borra las anteriores estadísticas.

Page 4: Comando  Analyze  ORACLE

Ejemplos ANALYZE Para analizar tabla con sus indices:

ANALYZE TABLE T_PEDIDOS COMPUTE STATISTICS; Para analizar solo la tabla:

ANALYZE TABLE T_PEDIDOS COMPUTE STATISTICS FOR TABLE; Para analizar solo sus indices:

ANALYZE TABLE T_PEDIDOS COMPUTE STATISTICS FOR ALL INDEXES;

Para analizar tabla con sus indices por estimación mirando el 20% de las filas: ANALYZE TABLE T_PEDIDOS ESTIMATE STATISTICS SAMPLE 20

PERCENT; Para borrar las estadísticas:

ANALYZE TABLE T_PEDIDOS DELETE STATISTICS;

Page 5: Comando  Analyze  ORACLE

Sintaxis completa:

Page 6: Comando  Analyze  ORACLE

Consideraciones: Al validar la estructura se realiza un control de

la integridad y puede bloquear la tabla/indice/cluster mientras se está ejecutando.

El recálculo de las estadísticas necesita gran cantidad de espacio de forma temporal. Podriamos tener que incrementar el valor para SORT_AREA_SIZE.

Si usamos la clausula INTO para almacenar una lista de filas enlazadas, la tabla por defecto es CHAINED_ROWS.

Page 7: Comando  Analyze  ORACLE

Paquete DBMS_UTILITY El comando ANALYZE esta disponible en todas

las versiones de oracle, pero es más comodo, más rapido y se obtienen mejores resultados si se usa el paquete DBMS_UTILITY, disponible a partir de la version 8.0.

DBMS_UTILITY.ANALYZE_SCHEMA('PROGRAMADOR','ESTIMATE', NULL, 10)

DBMS_UTILITY.ANALYZE_DATABASE('ESTIMATE',NULL,20,NULL)

No todos los parámetros deben ser especificados; únicamente los necesarios.

exec dbms_utility.analyze_schema( 'esquemaX', 'COMPUTE', NULL, NULL, NULL)

Este paquete se utiliza para modificar, ver, exportar, importar y borrar estadisticas de la base de datos.

Page 8: Comando  Analyze  ORACLE

Paquete DBMS_UTILITY Oracle recomienda la utilización de este paquete a partir de la

versión 9i para el calculo de estadisticas en lugar de usar ANALYZE debido a que es mas exacto y mas eficiente.

Cuando se generan nuevas estadisticas para una tabla, columna o indice las estadisticas existentes son actualizadas por Oracle, cuando se actualizan las estadisticas Oracle invalida cualquier SQL que se encuentra en memoria (parsed) que accesa el objeto al cual se les estan calculando estadisticas.

Esto quiere decir que si alguien ejecutó un query sobre la tabla empleados y se empiezan a calcular estadisticas sobre esa tabla Oracle invalida el query SQL que esta compartido en la memoria en lugar de re-utilizarlo.

Oracle utiliza las nuevas estadisticas cuando el query SQL es ejecutado de nuevo y por lo cual puede utilizar un plan de ejecucion diferente.

Page 9: Comando  Analyze  ORACLE

Cálculo de estadísticas dentro del paquete DBMS_STATS

Procedimiento Que calcula?

GATHER_INDEX_STATS Indices

GATHER_TABLE_STATS Tablas, columnas e indices

GATHER_SCHEMA_STATS Para todos los objetos del schema

GATHER_DICTIONARY_STATS Para todos los objetos del diccionario de datos

GATHER_DATABASE_STATS Para todos los objetos en la base de datos

Page 10: Comando  Analyze  ORACLE

GATHER_INDEX_STATS

Page 11: Comando  Analyze  ORACLE

GATHER_INDEX_STATS (parámetros)

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_stats.htm#sthref8108

Page 12: Comando  Analyze  ORACLE

Ejemplo   EXEC DBMS_STATS.DELETE_INDEX_STATS('SCOTT','PK_EMP');

EXEC DBMS_STATS.DELETE_INDEX_STATS('SCOTT','EMP_PRIMARY_KEY');

select OWNER,INDEX_NAME,NUM_ROWS, SAMPLE_SIZE,LAST_ANALYZED, BLEVEL,LEAF_BLOCKS,DISTINCT_KEYS from dba_indexes where owner = 'SCOTT' and index_name= 'EMP_PRIMARY_KEY';

AquÍ podemos ver que el Índice no ha sido analizado y por lo tanto no tiene estadisticas aunque la tabla puede llegar a tenerlas

select OWNER,table_NAME,LAST_ANALYZED from dba_tables where owner = 'SCOTT' and table_name = 'EMP';

Page 13: Comando  Analyze  ORACLE

Ejemplo Se procede a calcular las estadísticas

EXEC DBMS_STATS.GATHER_INDEX_STATS('SCOTT', 'EMP_PRIMARY_KEY');

Cuando una tabla es muy pequeña Oracle usa el 100% del compute, es decir NULL en el parámetro compute. Cuando una tabla contiene miles o millones de registros es mejor utilizar:

DBMS_STATS.AUTO_SAMPLE_SIZE

Page 14: Comando  Analyze  ORACLE

Ejemplo

Al igual que el comando ANALYZE si le damos un valor más alto a estimate_percent entones obtendremos estadísticas más exactas, pero de igual manera va a tardar más tiempo en calcularlas. El último ejemplo se calcularon usando AUTO_SAMPLE_SIZE y Oracle decidió que lo ideal era calcular para todos los registros.

Page 15: Comando  Analyze  ORACLE

Ejemplo