1 / 15

Comando Analyze ORACLE

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 ).

bonita
Download Presentation

Comando Analyze ORACLE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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.

  3. 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.

  4. 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;

  5. Sintaxis completa:

  6. 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.

  7. 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.

  8. 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.

  9. Cálculo de estadísticas dentro del paquete DBMS_STATS

  10. GATHER_INDEX_STATS

  11. GATHER_INDEX_STATS (parámetros) http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_stats.htm#sthref8108

  12. 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';

  13. 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

  14. 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.

  15. Ejemplo

More Related