| Inicio | Tu Cuenta | Manuales | Foros | Tutoriales | Los TOP | Empleos| Artículos | Comentarios |   

Manual Oracle
 1: Monitoreo de Bloqueos 
 2: Manejo de Clusters en Oracle 
 3: Analiszando las Consultas tipo Hash 
 4: Introducción a ORACLE Developer - Castellano 
 5: Creación de un Formulario en Developer Forms - Castellano 
 6: Administracion de Base de Datos Oracle 
 7: Tutorial de Oracle9i Reports 
 8: Manual de Developer Forms 
 9: Manual de Oracle9i Reports 
 10: External tables en Oracle 9i 


Mas de Oracle


Noticias Oracle


Error Ora-


Script Oracle Español
· Scripts para DBA
· SQL ANSI en Oracle 10g
· Pivoting INsert en Oracle 10g
· Sentencias de inserción en varias tablas - Oracle 10g
· Sentencia Insert condicionada - Oracle 10 g

[ Más en la Sección de Noticias ]



¿Como puedo usar el optimizador basado en costes para optimizar una consulta?
Enviado el Lunes, 24 julio a las 05:00:00 por csr

Concepto y Practica

¿Como puedo usar el optimizador basado en costes para optimizar una consulta?


Autor y Licencia de este articulo: José Manuel - http://www.lawebdejm.com

El optimizador basado en costes (Cost Based Optimizer, CBO) se introdujo en Oracle 7 y se basa en calcular el coste de distintos planes de ejecución y eligir para la ejecución el plan de ejecución con menor coste. En su contra, está el optimizador basado en reglas (Rules Based Optimizer, RBO), que se basa en una reglas prefijadas para decidir el plan de ejecución de una consulta.

Para calcular el coste de una consulta, el optimizador se basa en las estadísticas almacenadas en el catálogo de Oracle, a través de la instrucción:

  ANALYZE [TABLE,INDEX]  [COMPUTE, ESTIMATE] STATISTICS;

Si no existen datos estadísticos para un objeto (por ejemplo, porque se acaba de crear), se utilizarán valores por defecto. Además, si los datos estadísticos está anticuados, se corre el riesgo de calcular costes basados en estadísticas incorrectas, pudiendo ejecutarse planes de ejecución que a priori pueden parecer mejores.
Por esto, si se utiliza el optimizador basado en costes, es muy importante analizar los objetos periodicamente (como parte del mantenimiento de la base de datos). Como las estadísticas van evolucionando en el tiempo (ya que los objetos crecen o decrecen), el plan de ejecución se va modificando para optimizarlo mejor a la situación actual de la base de datos. El optimizador basado en reglas hacía lo contrario: ejecutar siempre el mismo plan, independientemente del tamaño de los objetos involucrados en la consulta.

Dentro de la optimización por costes, existen dos modos de optimización, configurables desde el parámetro OPTIMIZER_MODE:

- FIRST_ROWS: utiliza sólo un número determinado de filas para calcular los planes de ejecución. Este método es más rápido pero puede dar resultados imprecisos.

- ALL_ROWS: utiliza todas las filas de la tabla a la hora de calcular los posibles planes de ejecución. Este método es más lento, pero asegura un plan de ejecución muy preciso. Si no se indica lo contrario, este es el método por defecto.

El optimizador basado en costes se utilizará en alguna de las siguientes situaciones:

1.- Si el parámetro OPTIMIZER_MODE del archivo INIT.ORA está definido como ALL_ROWS o FIRST_ROWS.
2.- Si existen estadísticas para alguna de las tablas involucradas en la consulta y el parámetro OPTIMIZER_MODE es distinto a RULE.
3.- Si se incluye un "hint" distinto a +RULE.
4.- Si se ha establecido la variable OPTIMIZER_GOAL a ALL_ROWS o FIRST_ROWS a nivel de sesión.
5.- En Oracle 7.3, si alguna tabla tiene un grado de paralelismo distinto de 0.


 
Enlaces Relacionados
· Más Acerca de Concepto y Practica
· Noticias de csr


Noticia más leída sobre Concepto y Practica:
Mandatos de Sql Plus



Votos del Artículo
Puntuación Promedio: 4.2
votos: 5


Por favor tómate un segundo y vota por este artículo:

Malo
Regular
Bueno
Muy Bueno
Excelente




Opciones

Versión Imprimible  Versión Imprimible

Enviar a un Amigo  Enviar a un Amigo


Manual Oracle
Oracle Manual y tutorial, Pl/Sql, Discoverer, Forms, Sql y Plsql - Orape



Adaptado para nuke 6.0 por DragónNB