Anuncios en tutorial de programación PLSQL

lunes, 26 de enero de 2015

Hints en PL/SQL para el modo de optimización

Programación PLSQL - Estoy firmemente convencido de que detrás de cada gran hombre hay un gran ordenadorLos hints son pistas que se dan al optimizador SQL de Oracle para que elabore el plan de ejecución de una sentencia DML (sentencias de manipulación de datos como select, insert, update, delete, etc) según nosotros le aconsejemos. En este primer artículo sobre los hints voy a empezar hablando de aquellos que se utilizan para seleccionar el modo de trabajar del optimizador Oracle. Estos hints, hablando desde un punto de vista práctico, no son muy utilizados, aunque no por ello pueden dejar de ser útiles en determinadas circunstancias.

Los hints se incorporan a una sentencia DML en forma de comentario y deben ir justo detrás del comando principal. Por ejemplo, si se tratara de una sentencia SELECT el formato sería el siguiente:

     SELECT /*+ COMANDO-HINT */ ...

Estos son los hints que se pueden utilizar para cambiar el modo de optimización del optimizador Oracle:

/*+ RULE */ - Fuerza a que se utilice el optimizador basado en normas (rule-based optimizer). Con este optimizador los planes de ejecución cambían según sea la sintaxis de la sentencia DML, no utiliza las estadísticas asociadas con las tablas de la base de datos Oracle y no calcula los costes del plan de ejecución. El optimizador basado en normas no ha cambiado desde la versión 6 de Oracle.

/*+ CHOOSE */ - Fuerza a que se utilice el optimizador basado en costes (cost-based optimizer). Este optimizador construye los planes de ejecución basándose en las estadísticas almacenadas en el diccionario de datos. Tiene en consideración el número de lectura lógicas (el factor más importante), la utilización de la CPU junto con los accesos a disco y a memoria, y el uso de la red (cuando los datos residen en diferentes servidores). Una de las ventajas de utilizar el optimizador basado en costes es que Oracle lo está mejorándolo continuamente.

/*+ ALL_ROWS */ - Fuerza a que se utilice el optimizador basado en costes y optimiza el plan de ejecución de la sentencia DML para que devuelva todas las filas en el menor tiempo posible. Es la opción por defecto del optimizador basado en costes y es la solución apropiada para procesos en masa e informes, en los que son necesarias todas las filas para empezar a trabajar con ellas.

/*+ FIRST_ROWS (n) */ - También fuerza a que se utilice el optimizador basado en costes y optimiza el plan de ejecución de la sentencia DML para que devuelva las "n" primeras filas en el menor tiempo posible. Esto es idóneo para procesos iterativos y bucles, en los que podemos ir trabajando con las primeras filas mientras se recuperan el resto de resultados. Obviamente este hint no será considerado por el optimizador si se utilizan funciones de grupo como MAX, SUM, AVG, etc.

6 comentarios:

Sebastián dijo...

Enhorabuena por este blog! casi lo único que he encontrado en Español sobre tuning SQL. Tengo que hacer un trabajo para el dia 16 de Enero...¿puedes mandarme más información o decirme dónde buscar?

Lo ideal sería un tutorial completo en Español

GRACIAS

Pepelu dijo...

Hola Sebastián,

Me alegro de que te guste el blog. Si estás buscando información acerca de optimización intenta en esta URL:

www.wikilearning.com/optimizacion_basica_de_sql-wkccp-3861-16.htm

Este blog lo voy actualizando poco a poco cuando dispongo de algún hueco en mi tiempo libre. Yo tengo algunos libros de Oracle sobre optimización pero, obviamente, no te los puedo hacer llegar.

marcexx66 dijo...

Gracias por compartir lo que sabes.
Saludos y suerte...

Pepelu dijo...

Gracias Marcexx66.

cacfhe dijo...

Saludos a todos y disculpen; les cuento: en la institución que trabajo hubo un equipo que estaba desarrollando unos sistemas cuya base es oracle 10g instalado en un linux itanium; la situación es que el profesional DBA ha dejado el trabajo y yo como tuve un curso de fundamentals I, II y PL/SQL me han nombrado DBA en su reemplazo, ahora bien como podrán darse cuenta, NO SE QUE HACER, ayudenme primero indicandome las tareas y responsabilidades del DBA y como cumplirlas. A lo mejor algún tutorial en español que me ayude. Muchas gracias de antemano

Pepelu dijo...

Cacfhe,

En tu empresa deben estar locos si pretenden que les saques las castañas del fuego habiendo cursado sólo esos cursos.

Si el DBA dejó la empresa y no ha podido pasar algún tiempo contigo y enseñarte, te aconsejo que digas en tu empresa que necesitas hacer un curso específico de DBA en Oracle 10g.

Yo lo único que te puedo indicar como referencia es la web de Oracle donde puedes encontrar un montón de documentación:

http://www.oracle.com/technology/documentation/index.html