Sie sind auf Seite 1von 17

TEORICO 1.

1 La optimizacin de una aplicacin, conocida como Tuning, se realiza en diferentes et apas: Diseo: Diseo de los datos Modelo de datos, Diseo de los procesos Desarrollo y Mantenimiento de la aplicacin: Visualizar y analizar el plan SQL que muestra como se ejecuta el comando SQL, Usar herramientas de Optimizacin : EXPLAIN PLAN, SQL TRACE y TKPROF. Modificar el plan SQL con el uso de directiv as (Hints) Administracin de la Base de Datos: Configuracin de la base de datos, Lectu ras de Disco (Entradas y salidas), Desfragmentar Base de Datos, Uso de recursos: Memoria, CPU Administracin del Sistema Operativo Administracin de la red FASES DEL PROCESAMIENTO DE UN COMANDO SQL

El procesamiento de un comando SQL tiene cuatro fases: Anlisis de la sintaxis (parse) Manejo de las variables (bind) Ejecucin (execute) Recuperacin de datos (fetch)

Anlisis (parse): Chequea sintaxis y gramtica del lenguaje SQL, Chequea semntica: ve rifica que los objetos existen y que el usuario tienen los permisos correspondie ntes. Determina y almacena el Plan SQL en memoria. Manejo de las variables (bind):Identifica las variables (bind) en el comando SQL , asigna o reasigna un valor a cada variable. Ejecucin (execute): Ejecuta el comando SQL segn el plan de ejecucin determinado en la fase Anlisis, realiza las operaciones de entrada/salida necesarias para la eje cucin del comando y ordena los datos en caso de ser necesario. Recuperacin de datos (fetch): Devuelve los registros del comando SQL. Share pool rea de memoria compartida donde queda guardado el plan y las estadstica s de una sentencia para poder reutilizarla. Solamente los comandos escritos en f orma idntica pueden ser reutilizados REUTILIZACION DE COMANDOS SQL - ESTANDARIZACION -Ejemplo de Regla de escritura Escribir en mayscula solo las palabras claves (SELECT FROM WHERE GROUP BY) Escribir un comando en varias lneas. Comenzar cada palabra clave en una nueva lnea. Usar espacio despus de cada coma Dejar un espacio en blanco antes y despus de un operador (-, +, =, <> )

La memoria asignada a la base de datos Oracle que se llama SGA (System G lobal Area) La SGA contiene la memoria compartida (Shared Pool) que tiene la inf ormacin del diccionario de datos y el rea SQL compartida necesaria para el procesa miento de los comandos SQL. La primera vez que se ejecuta un comando SQL queda almacenado en la memo ria llamada Area SQL Compartida(Shared SQL Area) para ser reutilizado Cuando la memoria compartida (Shared Pool) se llena, el motor de la base de datos Oracle genera espacio mediante el algoritmo LRU (least recently used) que elimina los comandos que no se utilizan con frecuencia. Podemos consultar el tamao con el comando SHOW SGA. Para consultar el AREA SQL (Shared SQL Area), donde esta la informacin de

los comandos SQL ejecutados, se usa la vista del diccionario de datos V$SQL que contiene, para cada SQL ejecutado en el rea SQL compartida, la siguiente informa cin de las fases de procesamiento: TEORICO 1.2 El plan de ejecucin es una combinacin de operaciones que se realizan para ejecutar un comando SQL AUTOTRACE: Activar la visualizacin del Plan SQL se ejecuta el comando: Desactivar la visualizacin del Plan usar el comando SQL*Plus F; SET AUTOTRACE ON; SET AUTOTRACE OF

La informacin que obtenemos para cada comando SQL con AUTOTRACE, tiene 3 partes: 1Resultado del comando 2Plan SQL Operaciones realizadas, nombre de los objetos usados, cantidad de registros ledos, Costo y Tiempo 3Estadsticas de AUTOTRACE Utilizacin de recursos para la consulta: Cantidad de lecturas , ordenamientos, bytes de informacin

ROWID es la direccin fsica del registro en el archivo que identifica de manera nica el registro en la tabla Las estadsticas nos indican como se usan los recursos al ejecutar el comando SQL. Las estadsticas ms importantes son: - DB block gets: Cantidad de entrada/salida de bloques en la memoria cach. - Consistent gets: Cantidad de entrada/salida consistente en la memo ria cach. - Physical reads: Cantidad de bloques ledos desde el disco. - Sorts (memory): Cantidad de operaciones realizadas en memoria para ordenar los datos. - Sorts (disk): Cantidad de operaciones realizadas en disco para ord enar los datos. Las estadsticas son tiles para comparar distintos planes de la misma consulta SQL 1) El Plan SQL mas eficiente es aquel que tiene las siguientes estadsticas: Entrada/salida de bloques en memoria cach (db block gets) Entrada/salida consistente en la memoria cache (consistent gets) Bloques ledos desde el disco (physical reads ) Con los menores valores. 2) Un Plan SQL es ms eficiente si: Los datos se ordenan en memoria- Sorts (memory) en lugar de en disco- Sor ts (disk) y tambin es mas eficiente el Plan con menor cantidad de ordenamientos

TEORICO 1.3 Para generar el plan con EXPLAIN PLAN debemos escribir EXPLAIN PLAN FOR antes de la consulta SQL como se muestra a continuacin EXPLAIN PLAN FOR SELECT * FROM MATERIAS

WHERE NOMBRE >= 'PROGRAMACION PHP' Para visualizar el Plan SQL consultamos la tabla PLAN_TABLE usando la funcin DISP LAY del paquete DBMS_XPLAN La siguiente consulta nos permite visualizar el ltimo plan SQL generado con EXPLAIN PLAN FOR SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY) Donde TABLE() es una funcin que transforma en una tabla el contenido de la funcin DISPLAY del paquete DBMS_XPLAN

ASIGNAR NOMBRE AL PLAN -SET STATEMENT_ID Para esto debemos asignar un nombre al plan, adicionando despus de EXPLAIN PLAN y antes del FOR la siguiente lnea SET statement_id = 'NOMBRE DEL PLAN' Por ejemplo Crear Plan con nombre PLAN_IGUAL: EXPLAIN PLAN SET STATEMENT_ID = 'PLAN_IGUAL' FOR SELECT * FROM MATERIAS WHERE NOMBRE = 'PROGRAMACION PHP'; En la funcin DISPLAY del paquete DBMS_XPLAN el nombre del plan que se va a visual izar se pasa como segundo parmetro Visualizar PLAN_IGUAL con la informacin TIPICA SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(NULL, 'PLAN_IGUAL','TYPICAL')); MODOS DE LECTURA TABLA E INDICES Lectura de tabla Modos TABLE ACCESS BY ROWID La lectura de cada registro de la tabla por rowid. Es el modo mas rpido de acceso a los registros de una tabla. ROWID es un valor nico que representa la direccin fsica del registro en la base de datos, formado por segmento de la base de datos , nmero de fichero , bloque de d atos, nmero de fila en el bloque. TABLE ACCESS FULL Lectura de TODA la tabla, desde el primer registro hasta el ltimo. Este es el mod o ms lento de acceder a los registros de una tabla. Lectura de ndices Modos INDEX UNIQUE Lectura de ndice nico (PRIMARY KEY o UNIQUE). Es uno de los modos ms rpidos de acced er a un registro INDEX RANGE SCAN Lectura del ndice para encontrar un rango de valores. Este modo se usa cuando en la condicin de la consulta se usan los operadores BETWEEN, <, >, <=, >= sobre col umnas indexadas.

TEORICO 1.4 SQL TRACE y TKPROF SQL Trace: Graba en un archivo la traza (trace) de los comandos SQL, con la info

rmacin del Plan SQL y las estadsticas de cada comando TKPROF: Lee el archivo generado por la traza y lo presenta en formato legible y ordenado segn las estadsticas con el fin de identificar cuales son los planes SQL que consume mas recurso (disco, memoria, cpu). SQL TRACE con TKPROF permite obtener el plan SQL de cada uno de los comando SQL ejecutados en una sesin de trabajo cuando nosconectamos a la base de datos. CONFIGURAR SQL TRACE NOTA: Los 3 parmetros son dinmicos por lo que no es necesario bajar y subir la bas e de datos para modificarlos. La modificacin de parmetros con ALTER SYSTEM tiene efecto en la siguiente conexin (login) del usuario, NO tiene efecto en las sesio nes que estn activas. ACTIVAR SQL TRACE Activar la traza modificando el parmetro SQL_TRACE a nivel de sesin con el comando : ALTER SESSION SET SQL_TRACE = TRUE; Para consultar el valor SQL_TRACE ejecutamos SHOW PARAMETERS SQL_TRACE; Conectados con el SuperAdministrador de la Base de datos, el usuario SYS, Se puede activar la traza de una sesin de otro usuario utilizando el procedimient o SET_SQL_TRACE_IN_SESSION del paquete DBMS_SYSTEM EXECUTE SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (SID NUMBER,SERIAL# NUMBER,SQL_TRACE PL/SQL BOOLEAN); Donde: SIDNmero nico que identifica una sesin en Oracle. SERIAL#Nmero de serie para la sesin indicada. SQL_TRACETRUE= Activa la traza. FALSE=Desactivar la traza Para saber cuales el valor de sid y serial de la sesin de un usuario, por ejemplo el usuario AVANZADO,se consulta la tabla del diccionario V$SESSION seleccionand o las columnas SID y SERIAL# como se muestra a continuacin SELECT SID, SERIAL#, MACHINE, PROGRAM FROM SYS.V_$SESSION WHERE USERNAME = 'AVANZADO'; Resultado SID SERIAL# MACHINEPROGRAM 3732 PC20SQL Developer Para activar el trace de otra sesion hay que conectarse con el usuario SYS que es SuperDBA Conectarse como SysDBA En SQLPLus sqlplus sys as sysdba; En SQLDeveloper la conexin debe configurarse con rol SYSDBA En SQLPlus EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (37,32, TRUE); En un programa PL/SQL BEGIN DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (37, 32, TRUE); END; ASIGNAR IDENTIFICADOR AL ARCHIVO TRACE Antes de ejecutar los comandos SQL y programas PL/SQL podemos modificar la sesin para adicionar al nombre del archivo trace un identificadorcon el comando ALTER SESSION SET TRACEFILE_IDENTIFIER='TRAZA_MAX_FECHA'; En Oracle XE el nombre del archivo es por ejemplo: XE_ORA_1340_TRAZA_MAX.TRC Donde XE_ORA: Prefijo que se asigna a todos los archivos trc en Oracle XE 10g

1340: Nmero del proceso que genera el trace TRAZA_MAX_FECHA: Texto asignado definido en TRACEFILE_IDENTIFIER que se ad iciona al final del nombre del archivo TRC: Extensin de los archivos trace Para identificar el numero del proceso se realiza la siguiente consulta de las t ablas V$PROCESS (informacin de los procesos)y v$SESSION (informacin de las sesione s) SELECT S.USERNAME USUARIO,P.SPIDPROCESO FROM V$SESSIONS,V$PROCESSP WHERE S.PADDR=P.ADDR AND S.USERNAME = 'AVANZADO'; Donde: SPID: Es el ID del Proceso del Sistema Operativo y ADDR es la direc cin del proceso El archivo de la traza XE_ORA_1340_TRAZA_MAX_FECHA.TRC se encuentra en la carpet a definida en el parmetro USER_DUMP_DEST SHOW PARAMETERS USER_DUMP_DEST; USER_DUMP_DEST STRING C:\CURSO Si queremos identificar a que usuario corresponde el archivo realizamos la sigui ente consulta SELECT S.USERNAME USUARIO,P.SPIDPROCESO FROM V$SESSION S,V$PROCESS P WHERE S.PADDR=P.ADDR DESACTIVAR LA TRAZA SQL Antes de visualizar el contenido del archivo trace debemos desactivar la traza S QL con el comando ALTER SESSION SET SQL_TRACE = FALSE; 6-USAR TKPROF PARA DAR FORMATO AL ARCHIVO TRACE USAR TKPROF PARA DAR FORMATO AL ARCHIVO TRACE: Si editamos el archivo trace XE_ORA_1340_TRAZA_MAX_FECHA.TRC vemos que su inform acin esta en un formato interno poco comprensible. Para interpretar la informacin en un formato comprensible se usa el programa TKPROF que es externo a la base de datos. El formato de TKPROF es TKPROF archivo_trace archivo_salida [OPCIONES] Donde archivo_trace Archivo generado por SQL_TRACE archivo_salida Archivo generado por TKPROF OPCIONES explain=usuario/password Mostrar el plan SQL conectado con el usuario sys=no Mostrar el plan SQL solo de los comandos ejecutados po r el usuario definido en la opcin explain . No muestra los comandos ejecutado por Oracle con el usuario SYS TKPROF se puede ejecutar desde SQLPlus con comando HOST. HOST es el comando de S QLPlus que permite ejecutar un comando del sistema operativo sin salir de SQL*P lus por ejemplo HOST DIR C:\CURSO\*.TRC INTERPRETAR EL RESULTADO CON TKPROF Al principio se muestra la informacin de: Versin de TKPROF Nombre del archivo TRACE Opciones de ordenamiento Descripcin de las columnas de las estadsticas Descripcin de las columnas de las estadsticas ********************************************************************************

count= number of times OCI procedure was executed cpu= cpu time in seconds executing elapsed = elapsed time in seconds executing disk= number of physical reads of buffers from disk query= number of buffers gotten for consistent read current = number of buffers gotten in current mode (usually for update) rows= number of rows processed by the fetch or execute call ******************************************************************************** El clculo de las estadsticas CPU y ELAPSED depende del parmetro TIMED_STATISTICS. Cuando el parmetro TIMED_STATISTICS tiene valor FALSE, las estadsticas CPU y ELAPS ED no se calculan, o sea su valor es 0 Si deseamos ordenar, en el archivo de salida de TKPROF, los comandos SQL segn los recursos utilizados, de forma tal que al inicio aparezcan los que usan ms recurs os se adiciona la opcin SORT al programa TKPROF Por ejemplo TKPROF xe_ora_1340_traza_max_fecha.trc traza_max_fecha_sort.txt explain=avanzado /avanzado sys=no SORT=(FCHqry,EXEqry,PRSqry) Los parmetros de la opcin SORT contienen nombre de la Fase de ejecucion del comand o SQL y el nombre de la estadstica Donde Nombre de la fase puede ser: PRS Anlisis (Parse) EXE Ejecucin FCH Recuperacin (Fetch) Nombre de la Estadstica puede ser: cnt numero de llamadas cpu tiempo de cpu ela tiempo total dsk lecturas desde disco qry buffers para lectura consistente row filas procesadas TKPROF OPCION PRINT TKPROF xe_ora_1340_traza_max_fecha.trc traza_max_fecha_sort.txt explain=avanzado /avanzado sys=no SORT=(FCHqry,EXEqry,PRSqry) PRINT=1 La opcion Print=n indica a TKPROF que se mostraran nicamente los n primeros coman dos Esta opcin es especialmente til si se utiliza conjuntamente con la opcin sort.

TEORICO 2.1 OPTIMIZADOR DE ORACLE Determinar el mejor plan SQL es un paso importante en el procesamiento de los co

mandos SQL ya que impacta en los tiempos de ejecucin. El funcionamiento del optimizador para estudiar el comando SQL es: 1. El optimizador genera un conjunto de planes SQL potenciales para el comando S QL basada en diferentes modos de acceso 2-El optimizador estima el costo de cada plan SQL basado en la estadstica grabada s en el diccionario de datos . Las estadsticas incluyen la informacin en cmo estn distribuidos los datos y las cara ctersticas del almacenamiento de las tablas y los ndices. El costo del plan es un valor estimado y es proporcional al uso de recursos: Entradas/Salida, CPU y memo ria, necesarios para ejecutar el comando SQL. 3-El optimizador compara los planes SQL y selecciona el plan SQL ptimo que es el del menor costo. La optimizacin se basa en un algoritmo matemtico complejo para decidir. A partir d e las estadsticas, cual es el plan ms efectivo. Calcula el costo de distintos plan es de ejecucin para el mismo comando SQL y elige el plan con menor costo.

El Estimator calcula tres medidas de estimacin a partir de las estadsticas grabadas en el diccionario de datos (Dictionary) Selectividad Cardinalidad Costo A partir de las estadsticas se calculan medidas de estimacin, por eso es importancia que las estadsticas estn a ctualizadas para mejoran el grado de exactitud de las medidas SELECTIVIDAD La selectividad se calcula a partir del nmero de valores distintos de una columna . Las columnas ms selectivas son aquellas que tienen mayor cantidad de valores di stintos, por ejemplo la columna CODIGO es muy selectiva ya que es una clave prim aria. La medida de selectivad de una columna se encuentra en la tabla del diccionario USER_TAB_COL_STATISTICS (contiene las estadisticas de las columnas) en la column a NUM_DISTINCT(cantidad de valores distintos que contiene la columna) Mayor cantidad de valores distintos es equivalente a mayor selectividad SELECT column_name estudiantes_columna, num_distinct distintos FROM user_tab_col_statistics WHERE table_name = 'ESTUDIANTES' ORDER BY num_distinct DESC ; La columna CODIGO siempre es selectiva, es clave primaria (contiene un valor nico para cada registro) la cantidad de valores distintos de CODIGO siempre es igual a la cantidad de r egistros de la tabla. La columna BECA no es selectiva: la cantidad de valores distintos siempre es 2 ( 'S' 'N') Independientemente de la cantidad de registros de la tabla. CARDINALIDAD L a CARDINALIDAD es la medida que representa el nmero de registros de la consulta La cardinalidad puede ser ESTIMADA o REAL Cardinalidad Estimada: Es la cantidad de registros estimado por el Plan SQL que se muestra en la columna ROWS del Plan SQL. Cardinalidad Real: Es la cantidad de registros que devuelve la consulta . Mientras mas cercana sea la cardinalidad estimada a la real mas eficiente es el Plan SQL COSTO El costo representa el uso de los recursos, donde el optimizador considera la en

trada - salida de disco, el uso de CPU y el uso de memoria como unidades del tra bajo. El costo es la medida que muestra el nmero de unidades de trabajo necesario s para ejecutar el comando SQL. El costo calculado se muestra en la columna COST (%CPU). Mientras menor costo ms eficiente es el Plan SQL

L os modos del optimizador a partir de la version 10g R2, son: ALL_ROWS FIRST_ROWS o FIRST_ROWS_N Donde: ALL_ROWS: Considera todos los registros de la tabla para calcular los plane s SQL. Este mtodo es ms lento, pero asegura un plan de ejecucin muy precis o. Es eficiente para reportes o tareas en modo batch FIRST_ROWS: Considera slo un nmero determinado de registros para calcular los planes SQL. El optimizador genera el plan que tiene el menor costo para mostr ar los primeros registros Es eficiente para consultas en modo interactivo (por pantalla) FIRST_ROWS_N: El valor de N puede ser 1, 10, 100, o 1000 FIRST_ROWS_1 FIRST_ROWS_10 FIRST_ROWS_100 FIRST_ROWS_1000 El valor de n especifica la cantidad de registros a tener a cons iderar para calcular el plan SQL. Modificar el modo de optimizacin Por el usuario para la sesin de trabajo actual ALTER SESSION SET OPTIMIZER_MODE = FIRST_ROWS; Por el administrador (DBA), usuario SYSTEM, para toda la base de datos ALTER SYSTEM SET OPTIMIZER_MODE = FIRST_ROWS; Modifica el parmetro para la sesin actual y para todas las s esiones que se activen despus de ejecutado el comando mientras la base este levantada. Modificar el archivo de parmetros del sistema (init.ora) en la li nea OPTIMIZER_MODE = FIRST_ROWS Cada vez que se baje la base de datos y sea iniciada nuev amente Oracle lee los parmetros del archivo init.ora Si el parmetro optimizer_mode No se cambio en el init.ora se toma el valor ALL_ROWS Se puede consultar la versin del optimizador de Oracle mostrando el valor del parm etro OPTIMIZER_FEATURES_ENABLE muestra SHOW PARAMETERS OPTIMIZER_FEATUR ES_ENABLE; optimizer_features_enablestring 10.2.0.1 El parmetro CURSOR_SHARING se usa para permitir o no la sustitucin en el comando S QL de constantes por variables El objetivo de habilitar la sustitucin de constantes por variables es que la cons ulta sea genrica y sea reutilizable para distintas constantes. Los valores posibles del parmetro CURSOR_SHARING son: EXACT (valor por defecto) FORCE SIMILAR

Si el valor de CURSOR_SHARING es diferente a EXACT, entonces el optimizador pued e sustituir constantes por variables. TEORICO 2.2 Las estadsticas -Son una coleccin de datos de la base de datos y de cada uno de sus obje tos. -Se utilizan por el optimizador para seleccionar el mejor plan de ejecu cin posible para cada comando. -Se almacenan en el diccionario de datos de la base -Contienen informacin, entre otros, de: Estadsticas de Tabla: Cantidad de registros - Cantidad de Bloques - Tamao Promedio de un registro Estadsticas de Columna: Cantidad de valores distintos de la column a (selectividad) - Cantidad de valores Estadsticas de ndice: Numero de bloques - Niveles - Factor de Agrup amiento (Clustering Factor) ACTUALIZACION AUTOMATICA DE LAS ESTADISTICAS Las estadsticas se deben actualizar en forma peridica ya que los objetos en la bas e de datos cambian constantemente. La actualizacin de las estadsticas por defecto, a partir de la versin 10g, es automt ica, con el fin de evitar que existan objetos con estadsticas desactualizadas. La base de datos automticamente colecciona las estadsticas para aquellas tablas si n estadsticas o con las estadsticas desactualizadas. Al actualizar las estadsticas de una tabla, tambin se actualizan las estadsticas de sus ndices. La actualizacin automtica de las estadsticas la realiza la tarea (JOB) llamada GATH ER_STATS_JOB Para verificar si la tarea (JOB) GATHER_STATS_JOB esta activa, o sea, si se estn actualizando las estadsticas en forma automtica se consulta en el diccionario de datos la tabla DBA_SCHEDULER_JOBS , donde se re gistran las tareas en cola para ser ejecutadas. SELECT job_name,owner, last_start_date Ultima_actualizacion, last_run_duration Duracion, enabled Activo FROM dba_scheduler_jobs WHERE job_name = 'GATHER_STATS_JOB'; La tarea GATHER_STATS_JOB se crea automticamente cuando se crea la base de datos, al ejecutarse llama al paquete interno DBMS_STATS.GATHER_DATABASE_STATS_JOBS_PROC que actualiza las estadsticas de objet os sin estadstica y de aquellos objetos que hayan sido modificados significativam ente (ms del 10% de los registros). Las tareas programadas de Oracle son manejadas por el controlador de tareas (Sch eduler) y se ejecuten de noche (de 22h a 6horas)y los fines de semana. Para activar/desactivar la actualizacin automtica de las estadsticas debemos conect arnos con el Super_Administrador (DBA) SYS que es quien administra las tareas pr ogramadas. Desactivar la actualizacin automtica ejecutando: EXECUTEDBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB'); Activar la actualizacin automtica ejecutando EXECUTEDBMS_SCHEDULER.ENABLE('GATHER_STATS_JOB'); CONSULTA ESTADISTICAS DE TABLAS

Las estadsticas de las tablas se registran en la tabla USER_TABLES: CONSULTA ESTADISTICAS DE INDICES Las estadsticas de los indices se registran en la tabla USER_INDEXES SELECT table_nameTabla, index_nameIndice, statusEstado , index_typeTipo, uniquenessUnico, distinct_keysDistintos, num_rowsRegistros, sample_sizeMuestra, last_analyzedActualizacion FROM user_indexes WHERE table_name = 'PROFESORES'; Las estadsticas de las columnas se registran en la tabla USER_TAB_COL_STATISTICS En los siguientes casos se se necesita actualizar las estadsticas en forma manual : Tablas voltiles Tablas que son recreadas durante el da: se eliminan sus registros y se insertan nuevos registros. Carga masiva de datos a una tabla con procesos batch Agregar o eliminar columnas de una tabla. Para la actualizacin de las estadsticas se usa el paquete DBMS_STATS y sus procedi mientos: GATHER_TABLE_STATS :Estadsticas para tabla, ndice y columna. GATHER_INDEX_STATS :Estadsticas para ndice GATHER_SCHEMA_STATS :Estadsticas para todos los objetos del esquema del usuario GATHER_DICTIONARY_STATS: Estadsticas para todos los objetos del diccionario de dat os. GATHER_DATABASE_STATS:Estadsticas para todos los objetos de la base de datos. Ejemplo Actualizacin estadsticas Tabla MATERIAS del esquema AVANZADO. Se actualiza estadsticas de la tabla, sus ind ices y columnas EXECUTE dbms_stats.gather_table_stats ('AVANZADO','MATERIAS'); Indice CU_MATERIAS del esquema AVANZADO EXECUTE dbms_stats.gather_index_stats('AVANZADO', 'CU_ESPECIALIDADES'); Esquema AVANZADO EXECUTE dbms_stats.gather_schema_stats ('AVANZADO'); Consulta fecha de actualizacin de las tablas SELECT table_name Tabla,last_analyzed Actualizacion FROM user_tables; Para configurar el tamao del muestreo con el fin de maximizar el rendimiento y ob tener la precisin estadstica adecuada existen dos formas AUTO_SAMPLE_SIZE Calcula el muestreo para cada objeto basado en las propiedades del objeto. ESTIMATE_PERCENT Especifica el porcentaje de registros a utilizar como muestreo. ESTADISTICAS DE LAS COLUMNAS - HISTOGRAMA La estadstica de columna puede ser almacenada como histogramas. Los histogramas p roporcionan una selectividad mejorada para datos sesgados (dispersos) y tener ma s informacin para obtener Plan SQL ptimo con distribuciones de datos no uniformes. El optimizador usa el histograma para determinar cuan sesgados (distribuidos) s on los datos de una columna. Los histogramas se generan segn el valor del parmetro METHOD_OPT que indica el met odo para crear histograma A partir de Oracle 10g el valor por defecto de METHOD_OPT es FOR ALL COLUMNS SIZE

AUTO, para que el optimizador de Oracle sea quien determine automticamente que co lumna necesita histograma. Para consultar el valor del parmetro METHOD_OPT se con sulta la funcin dbms_stats.get_param que muestra el valor de un parmetro estadstico SELECT dbms_stats.get_param('METHOD_OPT') metodo FROM dual; Resultado METODO -------------------------------------------FOR ALL COLUMNS SIZE AUTO Para no usar Histograma se le asigna al parmetro METHOD_OPT el valor 'FOR ALL COL UMNS SIZE 1' (Solo un usuario Administrador -DBA puede modificar el parmetro) EXECUTE dbms_stats.set_param('METHOD_OPT', 'FOR ALL COLUMNS SIZE 1'); Un histograma esta compuesto por una cantidad de franjas/bandas, donde cada fran ja/banda contiene informacin sobre el valor de la columna y la cantida de registros para ese valor. Oracle usa dos tipos de histog ramas para la estadstica de columna: HEIGHT BALANCED - Balanceados por altura Los valores de columna son divididos en franjas/bandas de modo que ca da franja/banda contenga aproximadamente el mismo nmero de registros. FREQUENCY-Frecuencia. Cada valor distinto de la columna corresponde a una franja/banda del histograma. Cada franja/banda contiene la cantidad de registros acumulados para e se valor La informacin de los Histogramas se registra en la tabla USER_TAB_COL_STATISTICS. El tipo de histograma se muestra en la columna HISTOGRAM, que puede tener los si guientes valores HEIGHT BALANCED, FREQUENCY o NONE. Para consultar los Histogramas generados por Oracle ejecutamos la consulta de la tabla USER_TAB_COL_STATISTICS SELECT table_name Tabla, column_name Columna, HistogramHistograma, num_buckets banda, num_distinct distintos FROMUSER_TAB_COL_STATISTICS WHERE HISTOGRAM <> 'NONE' ORDER BY 1,2,3; Consulta - Estadisticas de Histograma para la tabla OBJETOS Generar manualmente un Histograma para la columna USUARIO de la tabla OBJETOS de 9 franjas (9 valores distintos - 9franjas) ejecutando EXECUTE DBMS_STATS.GATHER_TABLE_STATS (OWNNAME => 'AVANZADO', TABNAME => 'OBJETO S', METHOD_OPT => 'FOR COLUMNS SIZE 9 USUARIO'); Si repetimos la Consulta - Estadisticas de Histograma para la tabla OBJETOS vemo s que para la columna USUARIO se ha creado un Histograma del tipo FREQUENCY Consulta-Histograma del tipo FREQUENCY de la Columna USUARIO de la Tabla OBJETOS en USER_HISTOGRAMS SELECT endpoint_number cantidad_registros, endpoint_value valor FROM USER_HISTOGRAMS WHERE table_name = 'OBJETOS' AND column_name = 'USUARIO' ORDER BY endpoint_number;

Nota: endpoint_value Para las columnas de texto muestra un nmero interno que se calcula con un algoritmo de Oracle endpoint_number muestra cantidad de registros en forma acumulativa

HISTOGRAMA-HEIGHT BALANCED Generar manualmente un Histograma para la columna USUARIO de la tabla OBJETOS de 3 franjas ejecutando EXECUTE DBMS_STATS.GATHER_TABLE_STATS (OWNNAME => 'AVANZADO', TABNAME => ' OBJETOS', METHOD_OPT => 'FOR COLUMNS SIZE 3 USUARIO'); Consulta - Estadisticas de Histograma para la tabla OBJETOS vemos que para la columna USUARIO se ha creado un Histograma del tipo HEIGHT BALANCED El Histograma del tipo HEIGHT BALANCED tiene la misma cantidad de registro por f ranja y se genera cuando la cantidad de franjas (3) es menor a la cantidad de va lores distintos (9).

TEORICO 2.3 METODOS DE ACCESO El mtodo de acceso es la forma en que se recuperan los registros y determina el nm ero de unidades del trabajo requerido para conseguir los datos. Mtodos de acceso para recuperar los registros son: Tablas Full Table Scans Indices Index Unique Scan Index Range Scan Full Index scan Index Skip Scans TABLAS - FULL SCANS El mtodo de acceso FULL SCAN lee todos los registros de la tabla y muestra aquell os que cumplen los criterios (WHERE) de seleccin. Cada registro de la tabla es ledo para determinar si satisface la condicin en el W HERE de la consulta. Cuando se realiza FULL SCAN los bloques de la tabla son ledos secuencialmente, ya que los bloques estn en forma continua, esto hace que la operacin de entrada - sa lida sea multibloque (se leen varios bloques a la vez) haciendo que la lectura F ULL Scan sea eficiente. EL FULL Scan puede ser mas eficiente que un INDEX Scan cuando el resultado devue lve la mayora de los registros de la tabla, ya que el FULL hace operaciones de en trada - salida con mas registros a la vez y en ese caso puede ser mas eficiente hacer menos lecturas grandes de la tabla que muchas lecturas pequeas a travs del i ndice.. El optimizador realiza TABLE ACCESS FULL en los siguientes casos:

1-No existe ndice para la columna que est en la condicin (WHERE) 2-Existe indice para la columna, pero la columna esta transformada por una func in o una operacin en la condicin (WHERE) CONSULTA TABLE ACCESS FULL - Columna APELLIDOS con indice se transforma con la funcin UPPER SELECT * FROM estudiantes WHERE UPPER(apellidos) ='VIERA'; 3-Si el resultado devuelve la mayora de los registros de la tabla, el optimizado r puede decidir realizar un TABLE ACCESS FULL INDEX UNIQUE SCAN Lee un solo registro del ndice que es UNICO y un nico registro de la tabla po r el ROWID obtenido del indice. CONSULTA INDEX UNIQUE SCAN. Columna NOMBRE es Clave Unica con indice CU_MAT ERIAS SELECT *FROM materias WHERE nombre = 'PROGRAMACION PHP'; PLAN SQL INDEX RANGE SCAN. Lee un subconjunto de registros del ndice para buscar un valor o un grupo de valores y despus lee los registro de la tabla por el ROWID obtenido del indi ce. CONSULTA INDEX RANGE SCAN - Columna CODIGO es clave primaria con indice CP_ MATERIAS SELECT *FROM materias WHERE cdigo BETWEEN 100 AND 200 ; FULL INDEX SCAN. Lee todo el indice y accede a la tabla por los ROWID obtenidos en el indice . En el caso que la consulta tenga un ordenamiento(ORDER BY) por la columna c lave primaria, como el indice esta ordenado por la columna, es mas eficiente leer todo el indice, en lugar de leer toda la tab la para despus ordenar los registros (SORT) CONSULTA INDEX FULL SCAN. Ordenar por la columna CODIGO que es clave primar ia con indice CP_MATERIAS SELECT*FROM materias ORDER BY codigo ; INDEX SKIP SCANS Es un mtodo de acceso a ndices compuestos por ms de una columna. Cuando existe un ndice compuesto, permite en algunas circunstancias, que el optim izador pueda usar el indice no teniendo en cuenta la primera columna del ndice. E s til cuando en una consulta hacemos referencia a alguna de las columnas del indi ce compuesto que no es la primera del ndice y se cumplen las siguientes condicion es: 1 - La primera columna del ndice tiene pocos valores distintos: Es una columna NO selectiva. 2- En la condicin de la consulta se hace referencia, a alguna de las columnas d el ndice que no es la primera. ORDENAMIENTO - SORT Los comandos SQL que tienen ORDER BY, GROUP BY, DISTINCT producen operaciones de ordenamiento (SORT) El ordenamiento(SORT) usa un rea de trabajo de la memoria, el tamao de esta rea de memoria puede ser configurada por el administrador, teniendo en cuenta que a may or rea mayor eficiencia del SORT pero esto implica un costo alto de consumo de me moria. El parametro SORT_AREA_SIZE determina el tamao del rea de ordenamiento en memoria, para consultar el tamao de SORT_AREA_SIZE ejecutamos: SHOW PARAMETERS SORT_AREA_ SIZE; NAME TYPE VALUE sort_area_size integer 65536 Las operaciones de ordenamiento son SORT ORDER BY

SORT GROUP BY SORT UNIQUE SORT AGGREGATE Cuando en la consulta hay ORDER BY entonces el optimizador realiza la operacin SO RT ORDER BY Cuando en la consulta hay GROUP BY entonces el optimizador realiza la operacin SO RT GROUP BY que puede ser con la opcin NOSORT que indica que los grupos se arman con el uso un indice, donde ya esta ordenada la columna del GROUP BY Cuando en la consulta se usa DISTINCT entonces el optimizador realiza la operacin SORT UNIQUE que puede ser NOSORT si se usa un indice donde ya esta ordenada la columna d el DISTINCT SELECT DISTINCT APELLIDOS FROM ESTUDIANTES; Cuando en la consulta se usa una funcin de grupo (MIN MAX COUNT) entonces el opti mizador realiza la operacin SORT AGGREGATE SELECT MIN(INGRESO), MAX(INGRESO) FROM ESTUDIANTES; Terico 2.4 UNION (JOIN) DE TABLAS La unin (JOIN) de tablas es cuando se recuperan datos de varias tabla donde la clu sula FROM contiene ms de una tabla y en la clusula WHERE estn las condiciones que u nen y relacionan a las tablas. Cuando hay unin de tablas el optimizador analiza los siguientes aspectos: Mtodo de AccesoDefine si usa o no indices y la forma de leer los datos (FULL , IND EX) Orden del JOINDefine cual es la primera tabla a leer, a partir de la cual se lee la segunda tabla y asi sucesivamente. Mtodo del JOINA partir del registro de la primera tabla se establece la forma de b uscar los registros en la segunda tabla Los mtodos del JOIN que vamos a estudiar son: NESTED LOOPS JOIN SORT MERGE JOIN HASH JOIN Los mtodos NESTED LOOP, MERGE y HASH son la forma de ejecutar el join entre tabla s y no son un paso en particular del Plan. NESTED LOOP JOINS El mtodo Nested loops join Se usa cuando hay indices en alguna de las columnas que estn en la condicin que une las tablas Se basa en leer cada registro de la primera tabla y despus buscar el correspondien te registro en la segunda tabla. Su eficiencia depende del parmetro de configuracin OPTIMIZER_INDEX_CACHING. El parmetro OPTIMIZER_INDEX_CACHING controla el costo de usar un ndice con Nested Loop. Su valor indica el porcentaje de bloques de ndice a usar en memoria ("buffer cach e") cuando el optimizador asume "index caching" para nested loops. Rango de valores de 0 a 100. Valor por defecto: 0. Un valor cercano a 100 indica uso de "index caching" en memoria ("buffer cache"). El mtodo SORT MERGE JOIN Se usa cuando NO hay indices por las columnas que unen las tablas y la condicin no es una igualdad (< <= > >= != <>)

Ordena los registros de la primera y segunda tabla por las columnas que unen (joi n) las tablas y despus realiza la combinacin (merge) de los registros de ambas tab las. Su eficiencia depende de dos parmetros SORT_AREA_SIZE: Tamao (bytes) de la rea de ordenamiento (SORT AREA). A mayor r ea de memoria para ordenamiento menor es el costo de SORT MERGE JOIN. Valor por defecto: 65536 DB_FILE_MULTIBLOCK_READ_COUNT: Cantidad de bloques que se pueden leer simul tneamente. Valor por defecto: 122 A mayor cantidad de bloques simultneos menor el costo de SORT MERGE JOIN ya que s e puede leer un nmero grande de bloques secuenciales de disco en una sola operac in de entrada - salida (I/O) (Leer interpretaciones de los planes sql) El mtodo HASH JOIN Se usa cuando NO existe indices y la unin es de IGUALDAD (=) Se crea una tabla HASH a partir de una funcin hash que devuelve un valor nico . La Tabla hash se crea para la tabla mas pequea(la que tiene menos registros) del join que es la primera tabla Al realizar la bsqueda se calcula el valor hash para un valor de la segunda tabla y se busca en la tabla hash que contiene los valores creados para la pri mera tabla. Se necesita memoria para cargar la tabla hash La eficiencia del mtodo Hash joins depende del parmetro HASH_AREA_SIZE Defin e la memoria que se puede usar para realizar operaciones de hash join. Valor por defecto 131072 Variantes del Hash Join: Vamos a ver variantes de HASH JOIN al usar

Realizar ejercicios despus de leer estos captulos anteriores. Teorico 3.1 HINTS: Los hints son directivas que se le dan al optimizador para influir en sus decisi ones y forzar a realizar determinada accin en el plan, por ejemplo usar o no un nd ice Reglas de los hints: Los hints se escriben inmediatamente despus del nombre del comando SQL (S ELECT INSERT UPDATE DELETE) en forma de comentario especial con el formato /*+ hints */ La sintaxis de los Hints es como la del los comentarios con la diferencia de que se adiciona el signo + para indicar el comienzo del Hint (no hay espacio en blanco entre *+) Un comando SQL slo puede tener un comentario con hints donde se pueden e scribir varios hints separados por espacios en blanco /*+ hint1 hint2 hin t3 */ Si existe conflicto entre algunos hints entonces no se aplican los hints en conf licto. Si en el comando SQL se usan alias para las tablas, en el HINTS se debe especificar el alias de la tabla y no el nombre de la tabla Si se especifica en el hint el nombre de la tabla para aquellas tablas que tiene n alias entonces el hint no es usado. El hint solo se aplica para el comando SQL en el que est escrito. Si hay un error en la escritura del hint, por ejemplo nombre incorrecto de una tabla o un ndice, se ignora el hint sin avisar del error.

Leer ejemplos del teorico

Teorico 3.2 INDICES AVANZADOS Los ndices se usan para: Control y Mantenimiento de Restricciones. Se crean indices para una tabla cuando se definen: Clave PRIMARIA (PRIMARY) Clave UNICA (UNIQUE). Mejora tiempos de respuesta de la consulta. Los ndices se usan para evitar hacer una lectura completa de una tabla gra nde Un ndice es efectivo solo si es utilizado, por eso debemos asegurarnos que su imp lementacin realmente mejora el rendimiento de las consultas a la tabla a la que pertenece el ndice. En algunos casos es necesario eliminar los indices, como por ejemplo, cuando se va a realizar una operacin masiva de alta/modificacin/eliminacin de registros en un a tabla, en este caso es recomendable eliminar los indices de la tabla y al fina lizar la carga de datos crear los indices. Vamos a estudiar distintos tipos de ndices NORMAL Indice que se usa por defecto en Oracle LOB Indice que Oracle crea para cada columna del tipo LOB (L arge Objects) Basado en Funcin Indices basados en expresiones, se pueden usar funciones d el sistema o creadas por el usuario. La estructura de datos de un ndice puede ser B-rbolB*tree Mapa de bitBitmap El ndice B*tree Es la estructura del indice por defecto en la indexacin de Oracle y es el mas usad o. Almacena como punteros los rowids para las claves del indice. Se usa en aplicaciones TRANSACCIONALES- OLTP (On-Line Transaction Processing - Pr ocesamiento Transaccional en Lnea)

El ndice Bitmap Almacena un mapa de bit para las claves del indice. Existe una funcin de mapeo que convierte el mapa de bits en los rowids de los regi stros Se usa en aplicaciones de INTELIGENCIA DE NEGOCIO - OLAP (On-Line Analytical Proc essing - Procesamiento Analtico en Lnea).